Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS中禁用导航栏按钮项_Ios_Ios7_Uinavigationbar - Fatal编程技术网

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

如何在iOS中禁用导航栏按钮项,ios,ios7,uinavigationbar,Ios,Ios7,Uinavigationbar,我已经创建了一个导航控制器。在第二个视图(被推送)中,我有一些webservice调用,并放置了一个覆盖视图和设置 self.view.userInteractionEnabled=否 一旦web服务调用完成,我将返回到 self.view.userInteractionEnabled=YES 执行此操作时,除导航栏上的按钮外,其他所有按钮都将被禁用。如何禁用这两个导航栏按钮项?(一个类似于后退按钮的按钮,弹出到第一视图控制器,另一个按钮提供有关帮助的信息) 我已尝试使用self.navigat

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

self.view.userInteractionEnabled=否

一旦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;

只需禁用您的
UINavigationController
视图和导航栏交互:

self.navigationController.navigationBar.userInteractionEnabled = NO;
self.navigationController.view.userInteractionEnabled = NO;
并在需要时启用它:

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

如果在
Swift

self.navigationItem.rightBarButtonItem?.enabled = true

此代码段将禁用该按钮。

最新Swift:若要隐藏“后退”按钮,必须使用:

self.navigationItem.setHidesBackButton(true, animated: false)
注意:这可能会触发导航栏中的错误,导致在转换到没有后退按钮(或在其位置有左按钮)的视图时,工件出现在隐藏的后退按钮的位置。出现的工件要么是省略号“…”要么是堆栈上前一个viewController的标题。我相信这个bug与苹果自己的示例代码项目“CustominguinavigationBar”CustomBackButtonViewController.m中记录的bug有关。请尝试以下代码:

- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
}
UIApplication.sharedApplication().beginIgnoringInteractionEvents()
这将停止用户与应用程序的交互,在服务呼叫后,再次编写此代码:

UIApplication.sharedApplication().endIgnoringInteractionEvents()

当然这会有帮助。

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

@property (nonatomic, strong) IBOutlet UIBarButtonItem * RightButton;
然后我把它连接到故事板上的按钮上。 然后,您可以随意设置其属性,如:

self.RightButton.enabled=true;

单线解决方案

self.navigationItem.leftBarButtonItem.enabled = NO;

self.navigationItem.rightBarButtonItem.enabled = NO;
为Swift 3更新:

如果要禁用导航栏按钮项目或要禁用导航栏,即导航栏上的所有项目,请使用以下代码行

// 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.

仅在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 4.2

self.navigationItem.rightBarButtonItem?.isEnabled = false

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

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

barButtonVar.isEnabled = false

Swift 5和iOS 13:

要删除所有左侧按钮或仅删除指定的按钮,只需从
leftBarButtonims
数组中删除即可

        self.navigationItem.leftBarButtonItems = []
斯威夫特5 它在为导航控制器工作

//禁用

self.navigationController?.navigationBar.isUserInteractionEnabled = false
//使能

self.navigationController?.navigationBar.isUserInteractionEnabled = true

这不管用。我仍然可以点击按钮并导航到“第一视图控制器”。@Sravan我刚刚编辑了我的答案,效果更好吗?禁用交互很好,您可以一次禁用一个按钮、导航栏按钮或整个窗口。但是,请确保始终可以启用它们。您可能需要考虑在计时器中包装“禁用”逻辑。例如,假设您开始下载但未正确完成,您的应用程序是否将挂起?是否要触发重试?启用所有?self.navigationController.view.userInteractionEnabled=否;冻结整个屏幕?我认为这行不通?两者都行不通。我仍然可以点击按钮并导航到第一个视图控制器。@Sravan您是在故事板中构建按钮还是动态构建按钮?我想动态构建可能会产生影响。在将按钮添加到导航栏后,请尝试放置此逻辑。iOS 13.0中不推荐使用“beginIgnoringInteractionEvents()”
self.navigationController?.navigationBar.isUserInteractionEnabled = true