弹出视图控制器离开堆栈而没有显示导航栏? [关闭]

Posted

技术标签:

【中文标题】弹出视图控制器离开堆栈而没有显示导航栏? [关闭]【英文标题】:Pop view controller off stack without a navigation bar shown? [closed] 【发布时间】:2013-04-26 18:49:02 【问题描述】:

我已经隐藏了导航栏,所以我可以在那里有一个自定义 UIToolBar,但是当我将工具栏项的 action 属性设置为弹出它的方法时,它不起作用,我认为它可能是因为我隐藏了导航栏。

这是我的代码:

[toolBarItems addObject:[[UIBarButtonItem alloc] initWithTitle:@"Articles" style:UIBarButtonItemStyleBordered target:nil action:@selector(backButtonTapped)]];

...

- (void)backButtonTapped 
    [self.navigationController popViewControllerAnimated:YES];

但是什么也没发生。

【问题讨论】:

隐藏导航栏是什么意思?检查并查看您的导航控制器是否为零 [self.navigationController setNavigationBarHidden:YES Animation:NO]; 不,它不是零。 hmm 可能需要查看更多代码,您在上面发布的代码是可以的。尝试 NSLogging 你的控制器堆栈并确保有一个视图可以弹出 给我这些答案:你的方法 backButtonTapped 调用了吗?你 self.navigationController.viewControllers 中是否有 viewcontrollers count > 1? 【参考方案1】:

你的选择器的目标是 nil,当它应该是 self 并且你需要将 sender 参数放在你的操作方法中!

[toolBarItems addObject:[[UIBarButtonItem alloc] initWithTitle:@"Articles" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonTapped:)]];

-(void) backButtonTapped: (id) sender 
   //code as before here

edit 正如@sulthan 所说,sender 参数不需要!您可以像以前一样忽略它!

【讨论】:

这并没有改变任何东西。 请在popViewcontrollerAnimated:方法中添加断点,并告诉我们点击按钮时是否命中 sender 参数是可选的。 @Sulthan 你能提供文档的参考吗?我没有在文档中发现对此不确定。由于我目前无法自己编译代码,我认为这是问题所在。 @DougSmith 确保它与隐藏导航栏无关!您添加的按钮(“文章”)是否出现在工具栏中?你的 viewController 中的 backButtonTapped 方法是在另一个对象的方法上吗?【参考方案2】:

我在整个视图上有一个 UITapGestureRecognizer,它拦截了 UIBarButton 上的点击。感谢this answer,我解决了这个问题,它基本上从一开始就停止了 UITapGestureRecognizer,除非它在 ​​UIToolBar 之外。

【讨论】:

以上是关于弹出视图控制器离开堆栈而没有显示导航栏? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ios:如何关闭模态视图控制器,然后弹出推送的视图控制器

如何在视图控制器中的标签栏和导航栏上全屏显示弹出视图?

弹出到根视图控制器,没有表视图的动画崩溃

显示一个已经在导航堆栈上的视图控制器

弹出拇指视图控制器后,视图控制器正在我的导航栏下绘制

iPhone Objective-C:使用导航控制器单击选项卡时禁用堆栈弹出