在哪里设置NavigationController.NavigationBar.isUserInteractionEnabled

时间:2017-09-15 06:07:02

标签: ios objective-c uinavigationcontroller uinavigationbar

我遇到有关将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

1 个答案:

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