我正在过渡到 iOS7 并遇到我的标签栏变得无响应的问题(点击标签没有做任何事情)。问题出现在标签栏控制器的视图控制器之一,调用presentViewController,然后再调用dismissViewController之后。然后选项卡变得无响应但在屏幕上可见。
详情: appdelegate有一个通过XIB配置的uitabbarcontroller,然后调用[self.window setRootViewController:tabBarController];在 didFinishLaunchingWithOptions
好的,此时一切都很好,我有一个带有 4 个视图控制器的选项卡栏,我可以通过单击选项卡在它们之间切换。
添加子导航: 其中一个选项卡有一个表格视图,当我单击那里的一行时,该视图控制器(显示表格)使用:[self presentViewController:subNav animated:NO completion:nil] 呈现一个 UINavigationController;
所以这也很好,新的导航控制器按照它应该的方式覆盖了选项卡,我在上面推送了其他视图控制器。
问题: 稍后我调用 [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];
所以这是获取第一个视图控制器的引用然后在其上调用“dismissNav”方法然后调用dismissViewControllerAnimated 的一种非常老套的方法。所以这些都不需要,因为我可以从“底部”视图控制器调用dismissViewContrllerAnimated。
在“底部”视图控制器中将上面的代码替换为:
[self dismissViewControllerAnimated:YES completion:nil];
现在选项卡在再次显示时起作用。