在哪里设置 NavigationController.NavigationBar.isUserInteractionEnabled

Posted

技术标签:

【中文标题】在哪里设置 NavigationController.NavigationBar.isUserInteractionEnabled【英文标题】:Where to Set NavigationController.NavigationBar.isUserInteractionEnabled 【发布时间】:2017-09-15 06:07:02 【问题描述】:

我有一个关于将 navigationBar.isUserInteractionEnabled 设置为 false 的问题。我将它设置在 viewDidLoad 和 viewDidLayoutSubviews 中。但是这个设置不起作用,因为即使我设置为 false,该值也是 true。 仅当我返回上一个视图时才需要设置为 false(单击 backButton 时,navigationBar.isUserInteraction 应设置为 false)。 我该怎么做?还有其他代表吗?或者我需要在调用 viewDidLoad 后设置计时器。 Here is an image to make it clear what I mean

【问题讨论】:

检查更新的答案我提供了代码来禁用导航栏在点击返回按钮时的用户交互 【参考方案1】:

如果您出于某种特定原因特别想禁用导航栏的 userInteraction,您可以通过调用来做到这一点

斯威夫特:

self.navigationController?.navigationBar.isUserInteractionEnabled = false

目标-C:

[self.navigationController.navigationBar setUserInteractionEnabled:false];

编辑 2:

只有当我返回上一个视图时才需要设置为 false(当 backButton 被点击,然后 navigationBar.isUserInteraction 应该 设置为假)

您不能在 viewController 的 viewWillDisappear 中禁用导航栏用户交互,因为如果在调用 viewWillDisappear 时点击了 backButton,则 ViewController 将从导航堆栈中移除。

所以当你调用 self.navigationController 你的导航控制器是 nil。

最简单的解决方案,添加您自己的后退按钮并在实际弹出 VC 之前禁用导航栏的用户交互。

在你的第二个VC中

- (void)viewDidLoad 
    [super viewDidLoad];

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:self action:@selector(handleBack)];

    self.navigationItem.leftBarButtonItem = backButton;
    // Do any additional setup after loading the view from its nib.


-(void)handleBack 
    [self.navigationController.navigationBar setUserInteractionEnabled:false];
    [self.navigationController popViewControllerAnimated:true];

这样就可以了

编辑 3:

您需要设置导航栏的用户交互,您可以通过禁用左右栏按钮项的用户交互来达到相同的效果

    for item in self.navigationItem.leftBarButtonItems! 
        item.isEnabled = false
    

    for item in self.navigationItem.rightBarButtonItems! 
        item.isEnabled = false
    

您可以根据您的逻辑在 viewDidLoad、viewWillAppear 或任何适合您的代码的地方启用和禁用它们。

Objective-C

for(UIBarButtonItem *item in self.navigationItem.leftBarButtonItems) 
    [item setEnabled:false];


for(UIBarButtonItem *item in self.navigationItem. rightBarButtonItems) 
    [item setEnabled:false];

【讨论】:

提问者将该语言标记为目标 C 兄弟 @anbu-karthik : 感谢编辑 :) 在 Xcode 中再次复制代码时错过了它 :) 没关系,我的兄弟,。 好的。我按照你的指示处理了。感谢您的帮助。

以上是关于在哪里设置 NavigationController.NavigationBar.isUserInteractionEnabled的主要内容,如果未能解决你的问题,请参考以下文章

AppScan Standard 在哪里设置语言

时钟设置在哪里设置?

华为手机防火墙在哪里设置?

ios账户设置在哪里关闭自动付费

ebs中的国家、省、市在哪里设置?

如何在导航栏内添加页面指示器?