无法将UIBarButtonItem添加到工具栏

时间:2013-09-13 07:56:35

标签: ios uibarbuttonitem

经历了针对这个问题的每一个stackoverflow解决方案后,它仍然令人沮丧地不适合我。

//UIBarButtonItem declaration
UIBarButtonItem* button1 = [[UIBarButtonItem alloc] initWithTitle:@"Button Text" 
style:UIBarButtonItemStyleBordered target:self action:@selector(myAction)];

//method 1
[self setToolbarItems:[NSArray arrayWithObjects: button1, nil] animated:YES];

//method 2
[self.navigationController.toolbar setItems:[NSArray arrayWithObject:button1]];

//method 3
self.navigationController.toolbarItems = [NSArray arrayWithObject:button1];

//displaying toolbar
[self.navigationController setToolbarHidden:NO];

上述方法都不适用于在工具栏上显示按钮 - 我得到的只是一个空白工具栏。有什么明显的东西我在这里不见了吗?

4 个答案:

答案 0 :(得分:5)

移动

//UIBarButtonItem declaration
UIBarButtonItem* button1 = [[UIBarButtonItem alloc] initWithTitle:@"Button Text" 
style:UIBarButtonItemStyleBordered target:self action:@selector(myAction)];

//method 1
[self setToolbarItems:[NSArray arrayWithObjects: button1, nil] animated:YES];

//displaying toolbar
[self.navigationController setToolbarHidden:NO];

viewDidAppear:(BOOL)animated这是UINavigationController获取它管理的UIViewController工具栏项的地方。

答案 1 :(得分:3)

使用

self.toolbarItems=[NSArray arrayWithObject:button1]

答案 2 :(得分:1)

使用Swift 3 / iOS 10,在最简单的情况下,您的导航控制器只包含一个视图控制器,您可以使用下面的代码显示您的视图控制器,其工具栏包含一个条形按钮项:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Show navigation controller’s built-in toolbar
        navigationController?.setToolbarHidden(false, animated: false)

        // Set the view controller toolbar items
        let items = [UIBarButtonItem(title: "Button Text", style: .plain, target: nil, action: nil)]
        setToolbarItems(items, animated: false)
    }

}

但是,如果您计划在导航控制器的堆栈中安装多个视图控制器,则必须在UINavigationControllersetToolbarHidden(_:animated:)中调用viewWillAppear()的{​​{1}}方法为了正确显示或隐藏导航控制器的内置工具栏:

viewWillDisappear()

答案 3 :(得分:0)

对于那些寻找 Swift 版本的人,请试试这个:

let someVC: UIViewController = ...
let someButton: UIBarButtonItem = ...
someVC.setToolbarItems([someButton], animated: true)

UINavigationController.toolbar属性文档明确说明了设置工具栏项应使用哪个API:

  

此工具栏内容的管理是通过与此导航控制器关联的自定义视图控制器完成的。对于导航堆栈上的每个视图控制器,您可以使用setToolbarItems:animated:的{​​{1}}方法分配一组自定义工具栏项。

- UINavigationController Class Reference