导航栏中未显示 Bar 按钮项

15
我正在开发一个应用程序,我的初始视图控制器嵌入在导航控制器和选项卡控制器中。
我的应用程序有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中添加额外的代码,这些控件都无法起作用。

我的故事板截图

应该显示按钮的应用程序截图

视图中控件的设置截图


2
删除您的第一个导航控制器,其次您不需要添加返回按钮,只需使用推送转场,第三尝试使用self.navigationItem.leftBarButtonItem(尝试在开头添加self)。 - Ersin Sezgin
@ErsinSezgin 谢谢!我的问题已经解决。当您能够提供答案时,我会接受它。 - Jules
6个回答

14

取代

navigationController?.navigationItem.leftBarButtonItem = leftItem

navigationItem.leftBarButtonItem = leftItem

更新:我建议您直接将它们添加到故事板中的Viewcontroller中。


抱歉,但那没有任何影响。 - Jules
更新了我的回答,你不能通过Storyboard添加它们吗?你必须先在navigationItem中拖放。 - MarkHim
不行,那个不起作用。我在我的故事板中更新了问题,并附上了我添加到视图中的控件的截图。 - Jules
你把navigationItem拖到navigationBar里了吗?看起来你只是把它拖到了你的ViewController里。 - MarkHim
我又试了一遍,但好像没有可用的navigationBar。当我添加一个时,我可以看到当前navigationBar下面有一条小线。移除第一个导航控制器(即初始视图控制器)解决了我的问题。感谢您的帮助。 - Jules

6

我也遇到了同样的问题。

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


5

首先删除您的第一个导航控制器,其次您不需要添加返回按钮,只需使用推送转场,第三,尝试使用self.navigationItem.leftBarButtonItem(在开头添加self)。 *原始答案是一条评论。


2

我有两个segue:一个通过storyboard segue,另一个是编程方式。Storyboard segue按预期显示了按钮。然而,编程方式的segue却显示了没有按钮的视图。

对于编程方式的segue,我使用的是:

present(theNewVC, animated: true)

当我将其更改为以下内容时,按钮出现并正常工作:
show(theNewVC, sender: self)

根据文档,present(...)会以模态形式呈现视图控制器。显然,模态视图控制器不会有导航栏按钮。我通过将storyboard的segue更改为Present Modally进一步确认了这一点 - 那里的按钮也消失了。

(使用Xcode 9,Swift 4)


0
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方法中。


-1
最近我也遇到了这个问题。我按照Ersin提到的方法尝试了一下,但是没有效果。后来又回溯了一下,发现问题出在这里: 我把它改成了 然后UIBarButtonItems又开始出现了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接