为什么self.navigationItem.hidesBackButton不起作用?

时间:2009-04-02 02:06:18

标签: iphone objective-c

我有一个 UIViewController ,它被推送到 UINavigationController 并且当前显示。当我在视图控制器中启动一些异步任务时,我可以将self.navigationItem上的 hidesBackButton 设置为 YES ,并且正确隐藏后退按钮。

任务完成后,我将 hidesBackButton 设置回 NO (在UI线程上,我可能会添加,我已经确定了这一点) , 什么都没发生。后退按钮保持隐藏状态。

有没有人见过这个?让我特别疯狂的是,在我的应用程序(相同的应用程序)中,在不同的 UINavigationController 层次结构中,完全相同的代码正常工作!

6 个答案:

答案 0 :(得分:4)

你是否从线程中调用hidesBackButton = NO?所有UI操作都应该在主线程上完成,否则它们不会有任何影响。

答案 1 :(得分:2)

我无法在我的机器上复制您的问题。然而,即使我在主线程上更新我的ui,我也遇到了类似于tableviews的问题。但是调用setNeedsDisplay解决了这个问题。

你可以尝试一下,看看是否有效:

[self.navigationController.navigationBar setNeedsDisplay];

我想这应该有效,你需要做同样的事情,但是要改为导航棒。请让我知道这是否有效 - 因为我无法测试我的解决方案因为我从来没有遇到过这个问题: - )

答案 2 :(得分:1)

您是否尝试通过调用setNeedsDisplay强制刷新视图? 也许操作系统没有立即获取更改,您需要强制它。

答案 3 :(得分:1)

您是否尝试过使用setHidesBackButton:animated:方法?也许这有一个略有不同的行为。

答案 4 :(得分:1)

在我的情况下,我只需要给视图标题,如: self.navigationItem.title = @“Menu”;

马里努斯

答案 5 :(得分:1)

我最近遇到过类似的问题。我尝试了在SO和其他论坛中找到的所有内容 - 没有任何效果。

在我的情况下,有一个模态显示的UINavigationController带有一个简单的根控制器,当按下按钮A或B时,它将分别推动控制器堆栈顶部的两个视图控制器(A和B)之一。控制器B是不应该显示后退按钮的那个。但是,有时它确实如此,有时它没有。

经过数小时的调试,我设法追踪它。控制器A是UITableViewController。每次我在此控制器中选择一个单元格时,委托会将控制器A弹出堆栈。但。我也使用了UISearchDisplayController。原来在搜索控制器仍处于活动状态时弹出视图搞砸了导航控制器中的某些东西,这使得之后无法隐藏控制器B中的后退按钮(好吧,它最终隐藏在viewDidLoad和{{1之间然后它总是变得可见。)

所以解决方案(而不是解决方法)是将此行添加到控制器A被解除的位置:

viewDidAppear:

希望这可以让人节省几个小时。