无法将 barbuttonitem 添加到导航控制器

Unable to add barbuttonitem to navigation controller

我想在我的 project.But 中集成导航控制器和标签栏控制器。我无法将右栏按钮添加到导航控制器。

我附上了故事板的截图

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

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

我面临的问题是在添加选项卡栏控制器后,我无法通过代码以及拖动到导航控制器来添加右栏按钮。请帮助我。

当 ViewController 嵌入 NavigationController 时,您使用

self.navigationItem.rightBarButtonItem = addBtn

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

self.tabBarController?.navigationItem.rightBarButtonItem = addBtn

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

如果只想为一个 viewcontroller 添加 rightBarButton,则将详细信息屏幕嵌入到新的 NavigationController 中。然后你可以使用

添加 rightBarButton
self.navigationItem.rightBarButtonItem = addBtn

您应该确定 parent returns 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
}