简体   繁体   中英

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. This is a tableview with 5 buttons. 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():

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).

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.

我的故事板的截图

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

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

Instead of

navigationController?.navigationItem.leftBarButtonItem = leftItem

do

navigationItem.leftBarButtonItem = leftItem

Update I suggest you add them directly in the storyboard to your 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.

Please assign frame to 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. The storyboard segue showed the buttons as expected. The progammatic segue, however, showed the view without the buttons.

For the programmatic segue, I was using:

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. 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.

(Using Xcode 9, Swift 4)

This happened to me recently. I was doing what Ersin mentioned, but to no avail. 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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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