简体   繁体   English

栏栏按钮项目未显示在navigationBar中

[英]Bar button item not shown in navigationBar

I'm working on an app where my initial view controller is embedded in a Navigation Controller and Tab bar controller. 我正在开发一个应用程序,我的初始视图控制器嵌入在导航控制器和标签栏控制器中。

In my app I have 3 different tabs, one tab is the settings view. 在我的应用程序中,我有3个不同的选项卡,一个选项卡是设置视图。 This is a tableview with 5 buttons. 这是一个带5个按钮的tableview。 every button will show the same view controller when it's touched. 每个按钮在触摸时都会显示相同的视图控制器。

When I touch on one of the buttons, I still have a nice green navigation bar, but my buttons do not work. 当我触摸其中一个按钮时,我仍然有一个漂亮的绿色导航栏,但我的按钮不起作用。

I tried dragging a Navigation Item into the view in my storyboard and then put a bar button item in it. 我尝试将导航项拖到我的故事板中的视图中,然后在其中放置一个条形按钮项。 I can see the button in my storyboard, but it won't show up in my app when I run it. 我可以在我的故事板中看到该按钮,但是当我运行它时它不会显示在我的应用程序中。

I also added the following code to my viewDidLoad(): 我还在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

But it won't have any effect. 但它不会有任何影响。

I checked if the correct UIViewController was assigned to my view in the storyboard, did several Clean builds (CMD + Shift + K) and Rebuilds (CMD + B). 我检查了故事板中是否为我的视图分配了正确的UIViewController,做了几个Clean构建(CMD + Shift + K)和Rebuilds(CMD + B)。

The following images are a screenshot of a part of my storyboard and a screenshot of my app at the view where the buttons won't show up. 以下图片是我的故事板的一部分的屏幕截图,以及我的应用程序的屏幕截图,其中按钮不会显示。

EDIT 编辑

Added a new screenshot about the controls in the view. 添加了有关视图中控件的新屏幕截图。 These do not work with or without the additional code in my viewDidLoad. 这些不带不带我viewDidLoad中额外的代码工作。

我的故事板的截图

应用程序按钮应显示的屏幕截图

我视图中控件设置的屏幕截图

Instead of 代替

navigationController?.navigationItem.leftBarButtonItem = leftItem

do

navigationItem.leftBarButtonItem = leftItem

Update I suggest you add them directly in the storyboard to your Viewcontroller 更新我建议您直接在故事板中将它们添加到Viewcontroller中

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

I also ran into same issue. 我也遇到了同样的问题。

In iOS 11 it's working fine but for iOS 10 or less it was not showing UIBarButtonItems which added programatically. 在iOS 11中,它运行良好,但对于iOS 10或更低版本,它没有显示以编程方式添加的UIBarButtonItems。

Please assign frame to UIBarButtonItem. 请将帧分配给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 

I had two segues: one via a storyboard segue, and one programmatic. 我有两个段落:一个是通过故事板segue,一个是程序化的。 The storyboard segue showed the buttons as expected. 故事板segue按预期显示按钮。 The progammatic segue, however, showed the view without the buttons. 然而,progammatic segue显示没有按钮的视图。

For the programmatic segue, I was using: 对于程序化的segue,我使用的是:

present(theNewVC, animated: true)

The buttons appeared and functioned correctly when I changed that to: 当我将其更改为:时,按钮出现并正常运行:

show(theNewVC, sender: self)

Per the documentation, present(...) presents the view controller modally. 根据文档, present(...)以模态方式呈现视图控制器。 Apparently a modal view controller doesn't get the nav bar buttons. 显然,模态视图控制器不会获得导航栏按钮。 I further confirmed this by changing my storyboard segue to Present Modally - and the buttons disappeared there as well. 我通过将故事板segue改为Present Modally进一步证实了这Present Modally - 按钮也在那里消失了。

(Using Xcode 9, Swift 4) (使用Xcode 9,Swift 4)

This happened to me recently. 这最近发生在我身上。 I was doing what Ersin mentioned, but to no avail. 我正在做的是Ersin提到的,但无济于事。 Backtracked a little more and found out that this was the culprit: 回溯了一点,发现这是罪魁祸首:

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

I changed it to 我改成了

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

and the UIBarButtonItems started appearing again. 并且UIBarButtonItems又开始出现了。

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;

this Code Write on ViewWillAppear method. 此代码写在ViewWillAppear方法上。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM