标签栏在其中一个视图控制器调用后无响应:presentViewController并关闭View Controller

时间:2014-02-04 18:58:15

标签: ios ios7 uitabbarcontroller presentviewcontroller

我正在转换到iOS7并遇到一个问题,我的标签栏没有响应(点击标签没有做任何事情)。问题发生在选项卡栏控制器的一个视图控制器之后,调用presentViewController,然后调用dismissViewController。然后标签变得没有响应,但在屏幕上可见。

详细信息: appdelegate有一个通过XIB配置的uitabbarcontroller然后调用 [self.window setRootViewController:tabBarController];在didFinishLaunchingWithOptions

好的,所以此时一切都很好,我有一个带有4个viewcontrollers的标签栏,我可以在它们之间切换,点击标签。

添加子导航 其中一个选项卡有一个表视图,当我在那里单击一行时,该视图控制器(显示表)呈现UINavigationController使用:[self presentViewController:subNav animated:NO completion:nil];

所以这也很好,新的导航控制器按照预期覆盖了标签,我推动了其他视图控制器。

问题: 后来我调用[self dismissViewControllerAnimated:NO completion:nil]; (我试过在子导航显示的一个视图控制器中调用它,以及通过对第一个调用presentViewController的视图控制器的引用)。目的是返回原始视图,显示标签。

这很有效,子导航消失,标签视图随着视图控制器一起显示,该视图控制器显示单击了行的表,但现在底部的标签都没有响应点击。

所以我不知道这是什么原因。我在iOS6版本中没有这个问题,但我使用的是presentModalViewController。帮助

更新:已解决(有点) 好吧,我让我的标签再次运行但不确定之前发生了什么。所以在非工作代码中,我这样做是为了回到我的标签和原始视图控制器(其中一个标签):

UIViewController *viewC=[[self navigationController].viewControllers objectAtIndex:0];
        if(viewC ==nil) NSLog(@"ViewC is nil");
        [[self navigationController] popToRootViewControllerAnimated:YES];
        FirstViewController *firstV=viewC.navigationItem.leftBarButtonItem.target;
        if(firstV==nil) NSLog(@"FirstV is nil");
        if(firstV!=nil && [firstV respondsToSelector:@selector(dismissNav)]) [firstV dismissNav];

所以这是一个非常hacky方式获取对第一个视图控制器的引用,然后在其上调用'dismissNav'方法,然后调用dismissViewControllerAnimated。所以这些都不需要,因为我可以从“底部”视图控制器调用dismissViewContrllerAnimated。

在“底部”视图控制器中用以下代码替换上面的代码:

[self dismissViewControllerAnimated:YES completion:nil];

现在,标签再次显示时可以正常工作。

0 个答案:

没有答案