代码之家  ›  专栏  ›  技术社区  ›  rjobidon

使用PopViewControllerAnimated和SelectedIndex(iPhone SDK)的uitabarController旋转问题

  •  0
  • rjobidon  · 技术社区  · 14 年前

    这是一个非常重要的自动旋转问题,很容易复制。

    我的应用程序有一个UItaBarController。每个选项卡都是uinavigationController。自动旋转通过正常调用shouldAutorotatePointerFaceOrientation和didRotateFromInterFaceOrientation来处理。

    接口正常旋转,直到我调用uiviewcontroller.popviewcontrolleranimated并更改uitabarcontroller.selectedIndex。

    复制步骤:

    1. 创建演示选项卡栏应用程序。
    2. 将以下代码添加到app delegate.h文件:
      import<uikit/uikit.h>
      @接口TestRotationAppDelegate:nsObject{ uiwindow*窗口; uITabarController*选项卡控制器;
      @属性(非原子,保留)IBoutlet UIWindow*窗口; @属性(非原子,保留)IBoutlet UITabbarController*TabbarController;
      @结束< BR> //将接口重新定义为CACH旋转消息 @接口UITabbarController(TestRotation1AppDelegate)
      @结束
    3. 将以下代码添加到app delegate.m文件:
      import“testrotationappdelegate.h”
      @实现TestRotationAppDelegate @合成窗口; @合成TabbarController;
      -(bool)应用程序:(uiapplication*)应用程序didFinishLaunchingWith选项:(nsDictionary*)启动{ [窗口AddSubView:TabbarController.View]; [窗口生成键和可见]; 返回是的;
      -(bool)shouldAuto接口方向:(ui接口方向)接口方向{ 返回是的;
      -(无效)解除锁定{ [Tabbar控制器释放]; [窗口释放]; [超级DealLoc];
      @结束< BR> @实现UITabbarController(TestRotation1AppDelegate)
      -(空)视图加载{ [超级视图加载]; //添加第三个选项卡并推送视图 uiviewcontroller*view1=[[[uiviewcontroller alloc]init]autorelease]; view1.title=@“第三个”; uinavigationcontroller*nav=[[[uinavigationcontroller alloc]initwrootviewcontroller:view1]autorelease]; nsmutablearray*array=[[nsmutablearray alloc]init]; [数组addObjectsFromArray:self.viewControllers]; [数组addobject:nav]; self.viewControllers=数组; //在第三个选项卡内推送视图2 uiviewcontroller*view2=[[[uiviewcontroller alloc]init]autorelease]; [导航按钮视图控制器:视图2动画:是]; //创建一个按钮以弹出视图2 uibutton*button=[uibutton buttonWithType:uibuttonTypeRoundedRect]; button.frame=cDirectmake(50、50、220、38); [按钮设置标题:@“Pop this view”forstate:uicontrolStateNormal]; [按钮添加目标:自我操作:@selector(doaction)for controlEvents:uicontrolEventTouchupInside]; [view2.view addsubview:button];
      -(无效)DoAction{ //旋转问题从这里开始 //删除一行代码,不会出现问题。 [self.selectedviewcontroller popviewcontrolleranimated:是]; self.selectedIndex=0;
      -(bool)shouldAuto接口方向:(ui接口方向)接口方向{ 返回是的;
      @结束

    在点击选项卡3上的按钮之前,界面自动正常旋转。

    非常感谢您的帮助!

    1. 创建演示选项卡栏应用程序。
    2. 将以下代码添加到app delegate.h文件中:
      #导入<uikit/uikit.h>
      @接口TestRotationAppDelegate:nsObject{ uiwindow*窗口; uITabarController*选项卡控制器; }
      @属性(非原子,保留)IBoutlet UIWindow*窗口; @属性(非原子,保留)IBoutlet UITabbarController*TabbarController;
      @结束
      //将接口重新定义为CACH旋转消息 @接口UitabarController(TestRotation1AppDelegate)
      @结束
    3. 将以下代码添加到app delegate.m文件中:
      #导入“testrotationappdelegate.h”
      @实现TestRotationAppDelegate @合成窗口; @综合禁忌控制器;
      -(bool)应用程序:(uiapplication*)应用程序didFinishLaunchingWith选项:(nsDictionary*)启动{ [窗口AddSubView:TabbarController.View]; [窗口生成键和可见]; 返回是的; }
      -(bool)shouldAuto接口方向:(ui接口方向)接口方向{ 返回是的; }
      -(无效)解除锁定{ [Tabbar控制器释放]; [窗口释放]; [超级DealLoc]; }
      @结束
      @实现UITabbarController(TestRotation1AppDelegate)
      -(空)视图加载{ [超级视图加载]; //添加第三个选项卡并推送视图 uiviewcontroller*view1=[[[uiviewcontroller alloc]init]autorelease]; view1.title=@“第三个”; uinavigationcontroller*nav=[[[uinavigationcontroller alloc]initwrootviewcontroller:view1]autorelease]; nsmutablearray*array=[[nsmutablearray alloc]init]; [数组addObjectsFromArray:self.viewControllers]; [数组addobject:nav]; self.viewControllers=数组; //在第三个选项卡内推送视图2 uiviewcontroller*view2=[[[uiviewcontroller alloc]init]autorelease]; [导航按钮视图控制器:视图2动画:是]; //创建一个按钮以弹出视图2 uibutton*button=[uibutton buttonWithType:uibuttonTypeRoundedRect]; button.frame=cDirectmake(50、50、220、38); [按钮设置标题:@“Pop this view”forstate:uicontrolStateNormal]; [按钮添加目标:自我操作:@selector(doaction)for controlEvents:uicontrolEventTouchupInside]; [view2.view addsubview:button]; }
      -(无效)DoAction{ //旋转问题从这里开始 //删除一行代码,不会出现问题。 [self.selectedviewcontroller popviewcontrolleranimated:是]; self.selectedIndex=0; }
      -(bool)shouldAuto接口方向:(ui接口方向)接口方向{ 返回是的; }
      @结束

    在点击选项卡3上的按钮之前,界面自动正常旋转。

    非常感谢您的帮助!

    1 回复  |  直到 14 年前
        1
  •  0
  •   rjobidon    14 年前

    iPhone SDK 3.2解决了这个问题。

    使用以前的SDK时,请使用[Self.SelectedViewController PopViewControllerAnimated:No]。