如何禁用UIBarButtonItem?

时间:2010-09-24 04:01:20

标签: iphone ios

我有一个不想被禁用的UIBarButtonItem。简短版本:当我打电话时

[myBarButtonItem setEnabled:NO];

什么都没发生。

myBarButtonItemmyVIewController中的IBOutlet。已在Interface Builder中将myViewController添加为MainWindow的对象。 myBarButtonItem商店已连接到BarButtonItem,并设置了相应的@syntesizeproperty行。

@property (nonatomic, retain) IBOutlet UIBarButtonItem *myBarButtonItem;

在myViewController.m中,

@synthesize myBarButtonItem;

任何人都知道为什么上述setEnabled方法没有影响?谢谢!

更新:修正了!不知道为什么,但显然出口没有设置。我使用我的App Delegate作为UIBarButtonItem的父对象,并且一切顺利。

4 个答案:

答案 0 :(得分:73)

您可以在UIViewController中禁用左侧导航按钮,而不使用任何IBOutlet:

self.navigationItem.leftBarButtonItem.enabled = NO;

要禁用右侧导航按钮:

self.navigationItem.rightBarButtonItem.enabled = NO;

<强> Swift3

self.navigationItem.rightBarButtonItem?.isEnabled = false

答案 1 :(得分:12)

如果你的工具栏有一个IBOutlet(并且你已经检查过以确保它是非零的),请尝试:

[ [ [ myToolBar items ] objectAtIndex: myBarButtonItemIndex ] setEnabled:(NO) ];

答案 2 :(得分:2)

我为rightBarButtonItems使用了不同的解决方案(Swift 4.2)。

我有3个按钮,所以使用了for循环,然后扩展了UINavigationItem,以便可以在我的整个应用程序中使用它。

extension UINavigationItem {
func setRightBarButtonItems(isEnabled:Bool){
    for button in self.rightBarButtonItems ?? [UIBarButtonItem()] {
        button.isEnabled = isEnabled
    }
}

然后我可以从TableViewController调用它

navigationItem.setRightBarButtonItems(isEnabled: false)

答案 3 :(得分:1)

在我的情况下(Swift)我将2个barButtonItems添加为数组 - 所以为了禁用它们,这就成功了

    navigationItem.rightBarButtonItems?.first?.enabled = false
    navigationItem.rightBarButtonItems?.last?.enabled = false