Ios Can';t将UIBarButtonim添加到工具栏

Ios Can';t将UIBarButtonim添加到工具栏,ios,uibarbuttonitem,Ios,Uibarbuttonitem,在检查了针对这个问题的每个stackoverflow解决方案之后,令人沮丧的是,它仍然不适用于我 //UIBarButtonItem declaration UIBarButtonItem* button1 = [[UIBarButtonItem alloc] initWithTitle:@"Button Text" style:UIBarButtonItemStyleBordered target:self action:@selector(myAction)]; //method 1 [

在检查了针对这个问题的每个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];
上面的方法都不适用于在工具栏上显示按钮——我得到的只是一个空白工具栏。这里有什么明显的遗漏吗?

使用

self.toolbarItems=[NSArray arrayWithObject:button1]
移动


要查看显示:(BOOL)动画这是UINavigationController获取其管理的UIViewController工具栏项的点。

对于那些寻找Swift版本的用户,请尝试以下操作:

让someVC:UIViewController=。。。
让someButton:UIBarButtonim=。。。
setToolbarItems([someButton],动画:true)
UINavigationController.toolbar
属性文档明确说明了应使用哪些API设置工具栏项:

通过与此导航控制器关联的自定义视图控制器来管理此工具栏的内容。对于导航堆栈上的每个视图控制器,可以使用
UIViewController
setToolbarItems:animated:
方法指定一组自定义工具栏项


--

对于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)
    }

}

但是,如果您计划在导航控制器的堆栈中包含多个视图控制器,则必须调用
UINavigationController
setToolbarHidden(u:animated:)
中的方法
viewwillappease()
viewwilldecome()
为了正确显示或隐藏导航控制器的内置工具栏:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

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

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

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

}

self.navigationController.toolbar
是否为null?不为null,记录结果:出于某种原因,我可以将按钮添加到作为子视图添加的UIToolBar的单独实例中,但我无法修改uinavigationcontroller的内置工具栏。理论上,它应该与setToolbarItems方法相同。您正在将工具栏项添加到navigationController.toolbarItems,但我已使用self.toolbarItems添加项。代码的另一部分可以。仅将项设置为self.toolbarItems(viewController的工具栏)然后工具栏项将可见,而不是其navigationController的工具栏项。出于某种原因,我可以将按钮添加到作为子视图添加的UIToolBar的单独实例中,但我无法修改uinavigationcontroller.OMG的内置工具栏我太笨了。我知道我做错了什么蠢事。在代码的底部,我意外地覆盖了方法-(void)setToolbarItems:(NSArray*)toolbarItems animated:(BOOL)animated{},并将其保留为空,因此我在上面输入的任何内容都不起任何作用!设置工具栏项目!!这是要调用的函数。
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

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

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

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

}