如何用 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的主要内容,如果未能解决你的问题,请参考以下文章

如何用ajax响应替换html元素?

如何用加号“+”号替换空格

如何用 setKeepAliveTimeout 方法替换 UIRemoteNotificationTypeVoip 方法?

如何用 HttpClient 替换 WebClient?

如何用一个字符替换两个字符?

如何用 UISearchBar 替换导航栏?