我遇到有关将navigationBar.isUserInteractionEnabled设置为false的问题。我在viewDidLoad和viewDidLayoutSubviews中设置它。但是这个设置不起作用,因为即使我设置为false,该值也为true。 我只需要在回到上一个View时(当单击backButton然后将navigationBar.isUserInteraction设置为false时)设置为false。 我该怎么做?还有其他代表吗?或者我需要在调用viewDidLoad后设置计时器。 Here is an image to make it clear what I mean
答案 0 :(得分:1)
如果您因某些特定原因而特定禁用导航栏的userInteraction,可以通过调用
来执行此操作斯威夫特:
self.navigationController?.navigationBar.isUserInteractionEnabled = false
<强>目标-C:强>
[self.navigationController.navigationBar setUserInteractionEnabled:false];
编辑2:
我只有在回到上一个View时才需要设置为false(何时 单击backButton,然后单击navigationBar.isUserInteraction 设置为false)
您无法在viewController的viewWillDisappear中禁用导航栏用户交互,因为如果在调用viewWillDisappear时调用backButton,则会从导航堆栈中删除ViewController。
因此,当您调用self.navigationController时,您的导航控制器为零。
最简单的解决方案,添加自己的后退按钮,并在实际弹出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或适合您的代码的任何地方启用和禁用它们。
<强>目标C 强>
for(UIBarButtonItem *item in self.navigationItem.leftBarButtonItems) {
[item setEnabled:false];
}
for(UIBarButtonItem *item in self.navigationItem. rightBarButtonItems) {
[item setEnabled:false];
}