繁体   English   中英

如何在 iOS 中禁用导航栏按钮项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM