[英]how to disable a navigation bar button item in iOS
我创建了一个导航控制器。 在第二个视图(被推送)中,我有一些网络服务调用并放置了一个覆盖视图和设置
self.view.userInteractionEnabled = NO ;
Web 服务调用完成后,我将恢复到
self.view.userInteractionEnabled = YES ;
当我这样做时,除导航栏上的按钮外,所有其他按钮都被禁用。 如何禁用这两个导航栏按钮项? (一个类似于后退按钮的按钮,它弹出到第一个视图控制器和另一个提供有关帮助信息的按钮)。
我试过使用self.navigationItem.backBarButtonItem.enabled = NO
。 但我仍然可以点击按钮并导航到第一个屏幕。 如何禁用这两个按钮?
尝试这个
受到推崇的
self.navigationItem.leftBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem.enabled = NO;
或简单地禁用
在边缘情况下
self.view.window.userInteractionEnabled = NO;
更新:最近苹果不允许后退按钮启用/禁用。 相反,我们可以隐藏它。
self.navigationItem.hidesBackButton = YES;
如果您在Swift
上运行,您可以执行以下操作
self.navigationItem.rightBarButtonItem?.enabled = true
此代码段将禁用该按钮。
只需禁用您的UINavigationController
视图和导航栏交互:
self.navigationController.navigationBar.userInteractionEnabled = NO;
self.navigationController.view.userInteractionEnabled = NO;
并在需要时启用它:
self.navigationController.navigationBar.userInteractionEnabled = YES;
self.navigationController.view.userInteractionEnabled = YES;
最新 Swift:要隐藏后退按钮,您必须使用:
self.navigationItem.setHidesBackButton(true, animated: false)
注意:这可能会触发导航栏中的错误,当转换到没有后退按钮(或在其位置有左按钮)的视图时,可能会导致出现一个工件来代替隐藏的后退按钮。 出现的工件要么是省略号“...”,要么是堆栈上前一个 viewController 的标题。 我相信这个错误与苹果自己的示例代码项目“CustomizingUINavigationBar”中记录的错误有关,CustomBackButtonViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
}
此代码应该适用于 Swift 4.2
self.navigationItem.rightBarButtonItem?.isEnabled = false
上面的代码将禁用按钮。 要启用它,将布尔值切换为 true
试试这个代码:
UIApplication.sharedApplication().beginIgnoringInteractionEvents()
这将阻止用户与应用程序交互,并在服务调用后再次编写此代码:
UIApplication.sharedApplication().endIgnoringInteractionEvents()
当然这会有所帮助。
真正禁用 UIBarButtonItem 的最简单方法如下:
barButtonVar.isEnabled = false
我通过向我的视图控制器添加一个属性来解决这个问题:
@property (nonatomic, strong) IBOutlet UIBarButtonItem * RightButton;
然后我将它连接到故事板上的按钮。 然后,您可以随意设置其属性,例如:
self.RightButton.enabled=true;
为 Swift 3 更新:
如果您想禁用导航栏按钮项目或您想禁用孔 UINavigationBar 即导航栏上存在的所有项目,请使用以下代码行;
// if you want disable
self.navigationController?.navigationBar.isUserInteractionEnabled = false
// if you want enable again
self.navigationController?.navigationBar.isUserInteractionEnabled = true
享受...!
对于 iOS 10.3 版本,swift 3:
self.navigationItem.rightBarButtonItem?.isEnabled = false.
一条线解决方案
self.navigationItem.leftBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem.enabled = NO;
斯威夫特 5 和 iOS 13:
要删除所有左按钮或仅删除指定的按钮,只需从leftBarButtonItems
数组中删除。
self.navigationItem.leftBarButtonItems = []
导航栏按钮项目必须通过 navigationItem 属性引用它们来切换。
例如:
func setupNav() {
let saveButton = UIBarButtonItem.init(barButtonSystemItem: .save, target: self, action: #selector(onSavePressed))
navigationItem.rightBarButtonItem = saveButton
saveButton.isEnabled = false
}
func validateSave() {
saveButton.isEnabled = isConditionMet // WON'T work
navigationItem.rightBarButtonItem.isEnabled = isConditionMet // WORKS!
}
var menuBtn = new UIButton(UIButtonType.Custom);
menuBtn.Frame = new CGRect(x: 0.0, y: 0.0, width: 20, height: 20);
menuBtn.SetImage(new UIImage("filter"), UIControlState.Normal);
menuBtn.Alpha = 0.05f; //to set the Alpha
menuBtn.Enabled = false;
仅在 Mvvmcross Xamarin.iOS 上测试
Swift 5 它适用于导航控制器
//禁用
self.navigationController?.navigationBar.isUserInteractionEnabled = false
//使能够
self.navigationController?.navigationBar.isUserInteractionEnabled = true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.