首页 > 解决方案 > 如何在 Xcode 中从不同的视图控制器禁用工具栏项

问题描述

所以我创建了一个多视图应用程序,它使用一个工具栏项,允许用户在应用程序中导航。这个工具栏项用于我为应用程序拥有的所有三个视图中。我面临的主要问题是我希望用户在打开第二个视图以允许视图显示其所有内容时不再能够点击工具栏项目(因为我正在逐渐显示标签)。我只想知道我是否能够从第二个视图的控制器中禁用工具栏项。

工具栏项链接到 ViewController.m。我希望能够从 PCRViewController.m 控制器禁用它。

请注意,我已经尝试在 ViewController.m 中创建一个方法并在第二个控制器中调用它,我还尝试在 PCRViewController.m 中使用以下代码行,self.navigationItem.rightBarButtonItem.enabled = NO;但两者都没有完成这项工作。

这是我如何放置工具栏的图像工具栏图片

如果您需要我提供其他任何内容,请告诉我,以便我解决此问题。谢谢您的帮助!

PS:我使用以下方法从一种视图切换到另一种视图:

- (IBAction)switchViews:(id)sender{
    if (!self.questionsViewController.view.superview){
        if (!self.questionsViewController){
            self.questionsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Questions"];
        }
    }
    
    if (!self.pcrViewController.view.superview){
        if (!self.pcrViewController){
            self.pcrViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PCR"];
        }
    }
    
    if (!self.infoViewController.view.superview){
        if (!self.infoViewController){
            self.infoViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Info"];
        }
    }
    
    //Switch views
    if (self.questionsViewController.view.superview){
        self.pcrViewController.view.frame = self.view.frame;
        [self switchViewFromViewController:self.questionsViewController toViewController:self.pcrViewController];
    }
    else if (self.pcrViewController.view.superview){
        self.infoViewController.view.frame = self.view.frame;
        [self switchViewFromViewController:self.pcrViewController toViewController:self.infoViewController];
    }
    else{
        self.questionsViewController.view.frame = self.view.frame;
        [self switchViewFromViewController:self.infoViewController toViewController:self.questionsViewController];
    }
}

下面是我使用的 switchViewFromViewController:toViewController 方法的代码:

- (void)switchViewFromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC {
    if (fromVC != nil) {
        [fromVC willMoveToParentViewController:nil];
        [fromVC.view removeFromSuperview];
        [fromVC removeFromParentViewController];
    }
    if (toVC != nil) {
        [self addChildViewController:toVC];
        [self.view insertSubview:toVC.view atIndex:0];
        [toVC didMoveToParentViewController:self];
    }
    
}

标签: iosobjective-cxcodetoolbaruitoolbaritem

解决方案


您可以使用 NSnotificationcentre 与其他控制器通信,然后禁用它


推荐阅读