【问题标题】:Bar button item not shown in navigationBar导航栏中未显示栏按钮项
【发布时间】:2015-11-13 15:45:13
【问题描述】:

我正在开发一个应用程序,其中我的初始视图控制器嵌入在导航控制器和标签栏控制器中。

在我的应用中,我有 3 个不同的选项卡,其中一个选项卡是设置视图。这是一个带有 5 个按钮的表格视图。每个按钮在被触摸时都会显示相同的视图控制器。

当我触摸其中一个按钮时,我仍然有一个漂亮的绿色导航栏,但我的按钮不起作用。

我尝试将导航项拖到故事板的视图中,然后在其中放置一个条形按钮项。我可以在我的故事板中看到该按钮,但是当我运行它时它不会显示在我的应用程序中。

我还在 viewDidLoad() 中添加了以下代码:

let leftItem = UIBarButtonItem(title: "< Back", style: .Done, target: self, action: Selector("Save"))
let rightItem = UIBarButtonItem(title: "Save", style: .Plain, target: self, action: Selector("Save"))

//self.parentViewController?.navigationItem.leftBarButtonItem = leftItem // also doesn't work

navigationController?.navigationItem.leftBarButtonItem = leftItem
navigationController?.navigationItem.rightBarButtonItem = rightItem

但它不会有任何效果。

我检查了故事板中是否为我的视图分配了正确的 UIViewController,进行了几次清理构建 (CMD + Shift + K) 和重建 (CMD + B)。

以下图片是我的部分故事板的屏幕截图和我的应用在按钮不会显示的视图中的屏幕截图。

编辑

添加了有关视图中控件的新屏幕截图。如果没有我的 viewDidLoad 中的附加代码,这些不适用于

【问题讨论】:

  • 删除你的第一个导航控制器,第二个你不需要添加返回按钮只需使用push segue,第三个尝试使用self.navigationItem.leftBarButtonItem(尝试在开头添加self。)
  • @ErsinSezgin 谢谢!我的问题解决了。当你能给出答案时,我会接受。

标签: ios swift uinavigationbar uinavigationitem


【解决方案1】:

代替

navigationController?.navigationItem.leftBarButtonItem = leftItem

navigationItem.leftBarButtonItem = leftItem

更新我建议您将它们直接添加到情节提要中的视图控制器中

【讨论】:

  • 对不起,这没有任何作用。
  • 更新了我的答案,你不能通过情节提要添加它们吗?您必须先拖放导航项
  • 不,这不起作用。我用我添加到故事板视图中的控件的屏幕截图更新了我的问题。
  • 你把navigationItem拖到navigationBar了吗?好像你只是把它拖到你的 ViewController 中
  • 我刚刚又做了一次,但似乎没有可用的导航栏。当我添加一个时,我可以在当前导航栏下看到一条小线。删除第一个导航控制器(这是最初的视图控制器)解决了我的问题。感谢您的帮助。
【解决方案2】:

我也遇到了同样的问题。

在 iOS 11 中它运行良好,但对于 iOS 10 或更低版本,它没有显示以编程方式添加的 UIBarButtonItems。

请将框架分配给 UIBarButtonItem。

let button =  UIButton(type: .custom)
button.setImage(UIImage(named: "img_name"), for:.normal)
button.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
button.frame = CGRect(x:0, y:0, width:32, height:32)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton

【讨论】:

    【解决方案3】:

    删除您的第一个导航控制器,第二个您不需要添加返回按钮只需使用 push segue,第三个尝试使用 self.navigationItem.leftBarButtonItem(尝试在开头添加 self。) *原始答案是评论。

    【讨论】:

      【解决方案4】:

      我有两种转场:一种是通过故事板转场,另一种是程序化转场。故事板 segue 按预期显示了按钮。然而,程序化的 segue 显示了没有按钮的视图。

      对于程序化转场,我使用的是:

      present(theNewVC, animated: true)
      

      当我将其更改为:

      show(theNewVC, sender: self)
      

      根据文档,present(...) 以模态方式呈现视图控制器。显然,模态视图控制器没有导航栏按钮。我通过将我的故事板 segue 更改为 Present Modally 进一步证实了这一点 - 按钮也在那里消失了。

      (使用 Xcode 9、Swift 4)

      【讨论】:

        【解决方案5】:
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
        
            [button setImage:[[UIImage imageNamed:@"BtnBack"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
            [button.imageView setTintColor:[UIColor whiteColor]];
            [button addTarget:self action:@selector(buttonClicked:)
             forControlEvents:UIControlEventTouchUpInside];
            UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]
                                           initWithCustomView:button];
            self.navigationItem.leftBarButtonItem = buttonItem;
        

        这段代码写在 ViewWillAppear 方法上。

        【讨论】:

          【解决方案6】:

          这件事最近发生在我身上。我正在做 Ersin 提到的事情,但无济于事。再回溯一点,发现这是罪魁祸首:

          nav.pushViewController(notifications, animated: false) nav.pushViewController(interactionCreateOrEdit, animated: false)

          我改成

          nav.setViewControllers([notifications, interactionCreateOrEdit], animated: false)

          UIBarButtonItems 又开始出现了。

          【讨论】:

            猜你喜欢
            • 2019-01-11
            • 1970-01-01
            • 2014-01-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多