如果您出于某种特定原因特别想禁用导航栏的 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];
}