ios - 在哪里设置 NavigationController.NavigationBar.isUserInteractionEnabled

标签 ios objective-c uinavigationcontroller uinavigationbar

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

最佳答案

如果您出于某些特定原因具体要禁用导航栏的用户交互,您可以通过调用来实现

swift :

self.navigationController?.navigationBar.isUserInteractionEnabled = false

objective-C :

[self.navigationController.navigationBar setUserInteractionEnabled:false];

编辑 2:

I need to set to false only when I back to previous View (when backButton is clicked and then navigationBar.isUserInteraction should be set to false)

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

因此,当您调用 self.navigationController 时,您的导航 Controller 为 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:

需要设置Navigation bar的User interaction可以通过禁用左右bar button items的user interaction达到同样的效果

    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];
}

关于ios - 在哪里设置 NavigationController.NavigationBar.isUserInteractionEnabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46232769/

相关文章:

ios - Apple 如何使用 CoreLocation 提供室内定位?

ios - TabBarController - 第一个 View 偏移 20px

应用内购买的 iOS 提交问题

iphone - 尝试覆盖 AppDelegate 实现文件中的 UINavigationBar

objective-c - 如何在Objective-C中使用NSXMLParser获取标签参数?

objective-c - 获取 EXC_BAD_ACCESS,不知道如何修复它

ios - 未触发自定义后退按钮选择器

swift - 如何在不同 View Controller 中的按钮手势后重置计时器?

ios - 在 Swift 2 中使用 Parse 获取 Twitter 个人资料图片

ios - 保存特定于应用程序的数据,即使在应用程序删除后也能保留