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

时间:2015-11-13 15:45:13

标签: ios swift uinavigationbar uinavigationitem

我正在使用我的初始视图控制器嵌入导航控制器和标签栏控制器的应用。

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

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

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

我还在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,做了几个Clean构建(CMD + Shift + K)和Rebuilds(CMD + B)。

以下图片是我的故事板的一部分的屏幕截图,以及我的应用程序的屏幕截图,其中按钮不会显示。

修改

在视图中添加了有关控件的新屏幕截图。如果没有我的viewDidLoad中的其他代码,这些内容无法与一起使用。

Screenshot of my Storyboard

Screenshot of my app where the buttons should show up

Screenshot of the the setup of the controls in my view

6 个答案:

答案 0 :(得分:10)

而不是

navigationController?.navigationItem.leftBarButtonItem = leftItem

navigationItem.leftBarButtonItem = leftItem

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

我也遇到了同样的问题。

在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 :(得分:2)

我有两个段落:一个是通过故事板segue,一个是程序化的。故事板segue按预期显示按钮。然而,progammatic segue显示没有按钮的视图。

对于程序化的segue,我正在使用:

// inside the ag-grid tag
    (gridReady)="onGridReady($event)"

// inside the AppComponent class
  onGroupOpened(event){
    event.node.setSelected(true)
    console.log(event)

  }

当我将其更改为:

时,按钮出现并正常运行
present(theNewVC, animated: true)

根据文档,show(theNewVC, sender: self) 以模态方式呈现视图控制器。显然,模态视图控制器不会获得导航栏按钮。我通过将故事板segue改为present(...)进一步证实了这一点 - 按钮也在那里消失了。

(使用Xcode 9,Swift 4)

答案 4 :(得分:0)

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

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

我把它改成了

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

并且UIBarButtonItems又开始出现了。

答案 5 :(得分:-1)

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方法上。