根据视图控制器的呈现方式隐藏 left/rightBarButtonItem

Posted

技术标签:

【中文标题】根据视图控制器的呈现方式隐藏 left/rightBarButtonItem【英文标题】:Hiding left / rightBarButtonItem based on how view controller is presented 【发布时间】:2016-07-31 21:41:45 【问题描述】:

我正在尝试在应用流程中重用视图控制器(我们称之为 aVC)。我可以通过模态演示或在 navigationController 上推送视图控制器来显示 aVC。

我在视图中有 rightBarButtonItem 代码确实加载了我仅在以模态方式呈现 aVC 时使用的设置右栏按钮项目。我想知道当我将 pushViewController 用于 aVC 而不是模态演示时,是否有任何方法可以隐藏该按钮。

【问题讨论】:

【参考方案1】:

您可以通过多种方式检测视图是否被推送或呈现:

1) 检测导航控制器的存在(推送)

if self.navigationController?.viewControllers.count > 0

    if self.NavigationItem != nil
    
        self.NavigationItem!.setLeftBarButtonItem(nil, animated: false)
        self.NavigationItem!.setRightBarButtonItem(nil, animated: false)
    

2) 检测视图是否为(模态呈现)

if self.presentingViewController != nil

    //View is presented

然后显示/隐藏您可以使用的按钮

  for item in self!.navigationItem.leftBarButtonItems! // may be rightBarButtonItems!
    
        item.enabled = true
        item.tintColor = UIColor.whiteColor()  You can change color
    

// To hide items 
        if self.navigationItem.leftBarButtonItems != nil
        
            for item in self.navigationItem.leftBarButtonItems!
            
                item.enabled = false
                item.tintColor = UIColor.clearColor()
            
        

或者你可以将按钮设置为 nil

if self.NavigationItem != nil

    self.NavigationItem!.setLeftBarButtonItem(nil, animated: false)
    self.NavigationItem!.setRightBarButtonItem(nil, animated: false)

【讨论】:

谢谢!,这正是我想要的。

以上是关于根据视图控制器的呈现方式隐藏 left/rightBarButtonItem的主要内容,如果未能解决你的问题,请参考以下文章

呈现一个模态视图控制器,但不要隐藏导航栏

如何在不隐藏 tabBar 的情况下呈现视图控制器

模态视图控制器优于呈现视图控制器

如何在快速在 textFieldDidBeginEditing 委托上呈现另一个视图控制器时隐藏键盘?

在当前视图控制器下显示新的视图控制器

以编程方式呈现新的 ViewController [Swift 3]