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

时间:2014-08-18 11:18:09

标签: ios ios7 uinavigationbar

我创建了一个导航控制器。在第二个视图(推送)中,我有一些webservice调用并放置一个叠加视图和设置

self.view.userInteractionEnabled = NO ;

网络服务通话完成后,我将恢复

self.view.userInteractionEnabled = YES ;

执行此操作时,除导航栏上的按钮外的所有其他按钮均被禁用。如何禁用这两个导航栏按钮项? (类似于后退按钮的按钮,弹出到第一个视图控制器,另一个按钮提供有关帮助的信息)。

我尝试过使用self.navigationItem.backBarButtonItem.enabled = NO。但我仍然可以点击按钮并导航到第一个屏幕。如何禁用这两个按钮?

15 个答案:

答案 0 :(得分:49)

试试这个

推荐

self.navigationItem.leftBarButtonItem.enabled = NO;

self.navigationItem.rightBarButtonItem.enabled = NO;

或简单地禁用

on Edge case

self.view.window.userInteractionEnabled = NO;

<强>更新 最近Apple不允许后退按钮启用/禁用。而不是我们可以隐藏它。

self.navigationItem.hidesBackButton = YES;

答案 1 :(得分:13)

如果您在Swift

上运行,则可以执行以下操作
self.navigationItem.rightBarButtonItem?.enabled = true

此代码段将禁用该按钮。

答案 2 :(得分:8)

只需停用UINavigationController视图和导航栏互动:

self.navigationController.navigationBar.userInteractionEnabled = NO;
self.navigationController.view.userInteractionEnabled = NO;

并在需要时启用它:

self.navigationController.navigationBar.userInteractionEnabled = YES;
self.navigationController.view.userInteractionEnabled = YES;

答案 3 :(得分:2)

- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
}

答案 4 :(得分:2)

此代码应可在Swift 4.2上运行

self.navigationItem.rightBarButtonItem?.isEnabled = false

上面的代码将禁用该按钮。要启用它,请将布尔值切换为true

答案 5 :(得分:2)

真正禁用UIBarButtonItem的最简单方法如下:

pickle.loads(pickle.dumps(list(filteredList)))

答案 6 :(得分:1)

我通过向viewcontroller添加一个属性来解决这个问题:

@property (nonatomic, strong) IBOutlet UIBarButtonItem * RightButton;

然后我将它连接到故事板上的按钮。 然后,您可以设置其属性,如:

self.RightButton.enabled=true;

答案 7 :(得分:1)

  

针对Swift 3进行了更新:

如果要禁用导航栏按钮项目,或者要禁用孔UINavigationBar,即导航栏上显示的所有项目,请使用下面的代码行;

// if you want disable
self.navigationController?.navigationBar.isUserInteractionEnabled = false

// if you want enable again
self.navigationController?.navigationBar.isUserInteractionEnabled = true

享受...!

答案 8 :(得分:1)

对于iOS 10.3版,swift 3:

self.navigationItem.rightBarButtonItem?.isEnabled = false.

答案 9 :(得分:0)

试试这段代码:

UIApplication.sharedApplication().beginIgnoringInteractionEvents()

这将阻止用户与app进行交互,并在服务后调用,再次编写此代码:

UIApplication.sharedApplication().endIgnoringInteractionEvents()

当然这会有所帮助。

答案 10 :(得分:0)

一线解决方案

self.navigationController?.view.isUserInteractionEnabled = false

答案 11 :(得分:0)

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上进行了测试

答案 12 :(得分:0)

导航栏按钮项必须通过通过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!
}

答案 13 :(得分:0)

Swift 5和iOS 13:

要删除所有左按钮或仅删除指定的按钮,只需从leftBarButtonItems数组中删除。

        self.navigationItem.leftBarButtonItems = []

答案 14 :(得分:0)

雨燕5 它适用于导航控制器

//禁用

self.navigationController?.navigationBar.isUserInteractionEnabled = false

//启用

self.navigationController?.navigationBar.isUserInteractionEnabled = true