我创建了一个导航控制器。在第二个视图(推送)中,我有一些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;
对于iOS 10.3版,swift 3:
self.navigationItem.rightBarButtonItem?.isEnabled = false.
一线解决方案
self.navigationController?.view.isUserInteractionEnabled = false
试试这段代码:
UIApplication.sharedApplication().beginIgnoringInteractionEvents()
这将阻止用户与app和服务后调用进行交互,再次编写此代码:
UIApplication.sharedApplication().endIgnoringInteractionEvents()
当然这会有所帮助。
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上测试
导航栏按钮项必须通过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!
}
如果您在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中记录的错误有关。
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
}
此代码应适用于Swift 4.2
self.navigationItem.rightBarButtonItem?.isEnabled = false
上面的代码将禁用该按钮。要启用它,请将布尔值切换为true
真正禁用UIBarButtonItem的最简单方法如下:
barButtonVar.isEnabled = false
我通过向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
享受... ...!