尝试使用 Swift 使 rightBarButton 消失后出现

Trying to make rightBarButton appear after making it disappear using Swift

我目前正在 Swift 中开发一个应用程序,在我的 viewDidLoad() 方法中,我故意将我的 rightBarButton 隐藏在我的导航栏上,如下所示:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: #selector(TableViewController.dismiss))
self.navigationItem.setRightBarButtonItem(nil, animated: true)

但是,在某些情况下,我想显示rightBarButton。我该怎么做?上面这行代码的反义词是什么?

将条形按钮项设置为 nil 后,它就消失了。但是,您可以做的是像这样存储栏按钮项目:

let barButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: #selector(TableViewController.dismiss));

然后你可以像这样appear/disappear:

self.navigationItem.rightBarButtonItem = barButtonItem
self.navigationItem.setRightBarButtonItem(nil, animated: true)

然后只要你想访问 barButtonItem 即可 appear/disappear。

您可以执行以下两个选项之一:

  • 保留你的 UIBarButtonItem 的引用,每次你消失时你将它保存到然后当你想再次显示它时你设置旧值。

  • 玩转 UIBarButtonItem 和 enabled/disable 属性 的颜色以启用与它的交互。

第一个选择始终保持对 UIBarButtonItem 的全局引用,第二个需要知道原始 UIBarButtonItem 的确切颜色以赋予其原始状态:

First Option:

private var isHidden: Bool!
private var righBarButtonItem: UIBarButtonItem!

@IBAction func hideButton(sender: AnyObject) {
    if self.isHidden == true {
        self.isHidden = false
        self.navigationItem.rightBarButtonItem = righBarButtonItem
    }
    else {

       self.isHidden = true
       righBarButtonItem = self.navigationItem.rightBarButtonItem
       self.navigationItem.setRightBarButtonItem(nil, animated: true)
    }
}

Second Option:

@IBAction func hideButton(sender: AnyObject) {
    if self.isHidden == true {
        self.isHidden = false
        self.navigationItem.rightBarButtonItem?.tintColor = UIColor.clearColor()
        self.navigationItem.rightBarButtonItem?.enabled = false
    }
    else {
        self.isHidden = true
        self.navigationItem.rightBarButtonItem?.tintColor = UIColor.blueColor()
        self.navigationItem.rightBarButtonItem?.enabled = true
    }
}

在上面的例子中,我设置了一个状态为 UIBarButtonItem 的变量,目的是为了知道值和 @IBOutlet 到 hide/show 的 UIBarButtonItem。变量 isHidden 需要在 viewDidLoad.

中设置它的初始值

希望对你有所帮助。