【问题标题】:Unable to add barbuttonitem to navigation controller无法将 barbuttonitem 添加到导航控制器
【发布时间】:2019-05-07 04:56:02
【问题描述】:

我想在我的项目中同时集成导航控制器和标签栏控制器。但是我无法将右栏按钮添加到导航控制器。

我附上了故事板的截图

我所做的是将导航控制器添加到登录屏幕,这次我可以通过添加代码以及将 barbuttonitem 拖动到导航控制器来添加 barbuttonitem。

let addBtn = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
self.navigationItem.rightBarButtonItem = addBtn

我面临的问题是在添加标签栏控制器后,我无法通过代码以及拖动到导航控制器来添加 rightbarbutton。请帮帮我。

【问题讨论】:

  • 将您的 uitabbar 控制器嵌入到导航控制器中
  • @Anbu.Karthik 我能知道怎么做吗?
  • @Anbu.Karthik 我阅读了链接中的内容,我想要的是我需要登录屏幕不要嵌入到 tabbarcontroller 中,它应该是初始控制器。详细信息屏幕应该只集成在 tabbarcontroller 中。那么如何实现这一点。我的项目流程首先是一个登录屏幕,它会重定向到一些选项卡屏幕,如详细信息屏幕,如何实现这一点?

标签: ios swift uibarbuttonitem rightbarbuttonitem


【解决方案1】:

当一个 ViewController 嵌入到你使用的 NavigationController 中时

self.navigationItem.rightBarButtonItem = addBtn

在您的项目中,Detail Screen 没有直接嵌入到 NavigationController 中。 Detail Screen 嵌入在 TabBarController 中,TabBarController 嵌入在 NavigationController 中。所以你应该使用

self.tabBarController?.navigationItem.rightBarButtonItem = addBtn

但是这个 addBtn 将在所有嵌入 TabBarController 的视图控制器中可见。

如果您只想为一个 viewcontroller 添加 rightBarButton,则将 Detail Screen 嵌入到新的 NavigationController 中。然后你可以添加 rightBarButton 使用

self.navigationItem.rightBarButtonItem = addBtn

【讨论】:

  • 它工作得很好,但是当我在每个导航控制器中分别嵌入详细屏幕时,它似乎在导航控制器下方附加了一个高度为 40 的工具栏。
  • @Arun 标签栏控制器的其他标签将在视图控制器的底部可见
  • 我得到的 UI 和你说的一样,但我在导航控制器下方得到了一个空格。请运行我附加的我的示例项目。 drive.google.com/open?id=1KkrhF7H8lDxCw0bhR_f23Fyf_D0RdYmp 。我在 presentController 中添加了一个视图,但在导航控制器和我添加的视图之间可见一个间隙。
【解决方案2】:

您应该确定parent 返回UINavigationController 的顶级子控制器。就我而言

parent?.parent?.navigationItem.right... 

成功了。

如果您重用控制器 - 无论是否嵌入 - 您希望将项目添加到 navigationItem,以下示例将起作用。但是,可能需要进行一些逻辑上的更改。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    guard parent is UINavigationController else {
        parent?.parent?.navigationItem.rightBarButtonItem = UIBarButtonItem()
        return
    }
    navigationItem.rightBarButtonItem = UIBarButtonItem()
    
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    
    guard parent is UINavigationController else {
        parent?.parent?.navigationItem.rightBarButtonItem = nil
        return
    }
    navigationItem.rightBarButtonItem = nil
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多