我有一个不想被禁用的UIBarButtonItem。简短版本:当我打电话时
[myBarButtonItem setEnabled:NO];
什么都没发生。
myBarButtonItem
是myVIewController
中的IBOutlet。已在Interface Builder中将myViewController
添加为MainWindow
的对象。 myBarButtonItem
商店已连接到BarButtonItem,并设置了相应的@syntesize
和property
行。
@property (nonatomic, retain) IBOutlet UIBarButtonItem *myBarButtonItem;
在myViewController.m中,
@synthesize myBarButtonItem;
任何人都知道为什么上述setEnabled
方法没有影响?谢谢!
更新:修正了!不知道为什么,但显然出口没有设置。我使用我的App Delegate作为UIBarButtonItem的父对象,并且一切顺利。
答案 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