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

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

self.view.userInteractionEnabled = NO ;

一旦Web服务调用完成,那么我将恢复

self.view.userInteractionEnabled = YES ;

当我这样做时,除了导航栏上的按钮之外的所有其他按钮都被禁用。 如何禁用那两个导航栏按钮项? (类似于后退按钮的按钮,弹出到第一个视图控制器,另一个按钮提供有关帮助的信息)。

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

尝试这个

推荐的

 self.navigationItem.leftBarButtonItem.enabled = NO; self.navigationItem.rightBarButtonItem.enabled = NO; 

或者简单地禁用

在Edge案例上

 self.view.window.userInteractionEnabled = NO; 

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

 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) 

注意:这可能会触发导航栏中的错误,当转换到没有后退按钮(或在其位置有一个leftButton)的视图时,该错误可能导致工件出现在隐藏后退按钮的位置。 出现的工件是省略号“…”或堆栈上前一个viewController的标题。 我相信这个bug与苹果公司自己的示例代码项目“CustomizingUINavigationBar”,CustomBackButtonViewController.m中记录的bug有关。

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

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

 @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。

尝试这个

 UIApplication.sharedApplication().beginIgnoringInteractionEvents() 

这将阻止用户与app进行交互,并在服务后调用写入此内容

UIApplication.sharedApplication()。endIgnoringInteractionEvents()

确定这会有所帮助。

一线解决方案

 self.navigationController?.view.isUserInteractionEnabled = false 
 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; //设置Alpha

menuBtn.Enabled = false;

仅在Mvvmcross Xamarin.iOS上测试