如何从 Xcode 中的不同视图控制器禁用工具栏项目 [重复]

Posted

技术标签:

【中文标题】如何从 Xcode 中的不同视图控制器禁用工具栏项目 [重复]【英文标题】:How to disable Tool bar item from a different view controller in Xcode [duplicate] 【发布时间】:2020-07-20 20:33:37 【问题描述】:

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

工具栏项链接到 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];
    
    

【问题讨论】:

【参考方案1】:

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

【讨论】:

还有其他更简单的方法吗?我不想用这个,因为我们没有在课堂上讨论它 你可以使用完成处理程序 你能解释一下你的想法吗? @Hiteshpatel:请不要在没有任何解释或一些示例代码的情况下写一行答案。最好把它写成评论。 @koen 你有什么办法可以帮助我吗?

以上是关于如何从 Xcode 中的不同视图控制器禁用工具栏项目 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xcode 中从控制器外部更新视图

如何在 Xcode 中的不同视图控制器上获取持久 iAd

如何在我的 Xcode Swift 项目的不同导航堆栈中从一个视图控制器屏幕切换到另一个?

UIBarButtonItem 在视图更改之前不会被禁用

Segues 直接从情节提要 xcode 中的视图控制器警告启动

如何在 XCode 中预览故事板的不同视图控制器