ios 如何禁用 UIBarButtonItem?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3784112/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-30 17:46:56  来源:igfitidea点击:

How to disable UIBarButtonItem?

iphoneios

提问by Dan Loewenherz

I have a UIBarButtonItem that just doesn't want to get disabled. Short version: when I call

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

[myBarButtonItem setEnabled:NO];

Nothing happens.

没发生什么事。

myBarButtonItemis an IBOutlet in myVIewController. myViewControllerhas been added as an object to MainWindowin Interface Builder. The myBarButtonItemoutlet has been connected to the BarButtonItem, and has the corresponding @syntesizeand propertylines set.

myBarButtonItem是 中的 IBOutlet myVIewControllermyViewController已作为对象添加到MainWindowInterface Builder 中。该myBarButtonItem出口被连接到所述BarButtonItem,并具有相应的@syntesizeproperty线集。

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

In myViewController.m,

在 myViewController.m 中,

@synthesize myBarButtonItem;

Anyone have an idea why the above setEnabledmethod has no affect? Thanks!

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

UPDATE: Fixed it! Don't know why, but apparently the outlet wasn't being set. I used my App Delegate as the parent object for the UIBarButtonItem, and all worked out.

更新:修复它!不知道为什么,但显然没有设置出口。我使用我的 App Delegate 作为 UIBarButtonItem 的父对象,一切都解决了。

回答by Nicu Surdu

You can disable the left navigation button from inside an UIViewController like this, without using any IBOutlet:

您可以像这样从 UIViewController 内部禁用左侧导航按钮,而无需使用任何 IBOutlet:

self.navigationItem.leftBarButtonItem.enabled = NO;

To disable the right navigation button:

要禁用右侧导航按钮:

self.navigationItem.rightBarButtonItem.enabled = NO;

Swift3

斯威夫特3

self.navigationItem.rightBarButtonItem?.isEnabled = false

回答by hotpaw2

If your toolbar has an IBOutlet (and you've checked to make sure it's non-nil), try:

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

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

回答by DavidCollinsNZ

I used a different solution (Swift 4.2) for my rightBarButtonItems.

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

I had 3 buttons so used a for loop, then made an extension of UINavigationItem so I could use it throughout my app.

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

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

Then i can call it from my TableViewController

然后我可以从我的 TableViewController 调用它

navigationItem.setRightBarButtonItems(isEnabled: false)

回答by ioopl

In my case (Swift) I had 2 barButtonItems added as an array - so to disable them this did the trick

就我而言(Swift),我将 2 个 barButtonItems 添加为一个数组 - 因此禁用它们就可以了

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