如何用 backBarButtonItem 替换 leftBarButtonItem
Posted
技术标签:
【中文标题】如何用 backBarButtonItem 替换 leftBarButtonItem【英文标题】:how to replace leftBarButtonItem by backBarButtonItem 【发布时间】:2012-06-13 06:00:33 【问题描述】:在 Interface Builder 中,我创建了一个视图作为 Storyboard 的一部分,该视图过去只显示在一个不同的上下文中(作为 UITabBarController 的视图)。
现在我想重用这个视图作为 UINavigationController 视图的一部分,但它通常可以正常工作。唯一的问题是,在 IB 中,我放置了一个按钮作为 leftBarButtonItem。因此,当我将同一个视图控制器推送到导航控制器的堆栈时,它不会再自动放置 backBarButtonItem。
是否有处理这种情况的标准方法?我是否必须自己删除按钮,具体取决于视图控制器是 UITabBarController 还是 UINavigationController 的一部分?我想将按钮保留在 IB 中。因此,例如在 viewDidDisappear 上将 leftBarButtonItem 设置为 nil 只是一种帮助。这确实正确显示了 backBarButtonItem,但是当用户返回该屏幕时,我将不得不再次手动设置 leftBarButtonItem。
【问题讨论】:
【参考方案1】:然后尝试使用这个:
self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;
【讨论】:
不。我想显示后退按钮而不是隐藏它。我正在寻找类似“self.navigationItem.leftBarButtonItemReplacesBackBarButtonItem = NO”的东西。self.navigationItem.backBarButtonItem
由于某种原因总是(空)(我猜是因为 leftBarButtonItem 在 IB 中设置)。因此,新代码只工作了一半,因为它现在总是隐藏 leftBarButtonItem。我需要一些条件,我想我可以在 viewDidLoad 上查询以编程方式将 leftBarButtonItem 设置为 nil。
是的,最好的方法是检查是否有任何视图控制器被压入堆栈。如果是,则意味着它被压入,否则它被呈现(在这种情况下,后退按钮将为(null ))。相应地,编写代码。
OK...所以我现在在我的 viewDidLoad 中使用此代码并且工作正常:if(self.navigationController.topViewController == self && self.navigationController.viewControllers.count > 1) self.navigationItem.leftBarButtonItem = nil;
。也许有人仍然可以指出一个更优雅的解决方案。
@Shantanu 先生,你也很棒 :)以上是关于如何用 backBarButtonItem 替换 leftBarButtonItem的主要内容,如果未能解决你的问题,请参考以下文章
如何用 setKeepAliveTimeout 方法替换 UIRemoteNotificationTypeVoip 方法?