显示/隐藏barButtonItem

Jes*_*ica 41 uibarbuttonitem ios swift

我正试图显示/隐藏一个UIBarButtonItem.我barButton在右边添加了一个storyboard.然后在viewDidLoad,我做了rightBarButtonItemnil.后来,我把它设置为button我添加的storyboard.这是我的代码:

// Right barButtonItem added in storybord:
@IBOutlet weak var deleteBarButton: UIBarButtonItem! 

// viewDidLoad
self.navigationItem.rightBarButtonItem = nil

// Later on...
self.navigationItem.rightBarButtonItem = self.deleteBarButton
Run Code Online (Sandbox Code Playgroud)

当我设置self.deleteBarButtonrightBarButtonItem,没有任何反应.它没有显示出来.我做错了什么,显示/隐藏一个正确/最有效的方法是barButtonItem什么?

更新

我尝试了以下方法:

self.deleteBarButton.hidden = true
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

UIBarButtonItem 没有名为'hidden'的成员

Jes*_*ica 77

刚拿到答案!您所要做的就是创建一个strong IBOutlet,然后您可以执行以下操作:

// viewDidLoad
self.navigationItem.rightBarButtonItem = nil

// Later on...
self.navigationItem.rightBarButtonItem = self.deleteBarButton
Run Code Online (Sandbox Code Playgroud)

  • 虽然这有效,但有一种更好的支持方式来支持动画http://stackoverflow.com/a/5006889/1166266 (5认同)
  • Swift 3.1 | 效果很好| // viewDidLoad self.rightBarButtonAlert.isEnabled = false self.rightBarButtonAlert.tintColor = .clear (4认同)

Jak*_*san 26

更新2

您可以将按钮的文本设置为空:

self.deleteBarButton.title = "";
Run Code Online (Sandbox Code Playgroud)

更新1

我会使用enabled属性来照亮按钮,如下所示(虽然它不会完全使按钮不可见,但它允许用户知道它不会执行操作).

这可以作为一个变量,让您知道按钮隐藏在您的案例中:

发光:(放置在ViewDidLoad中)

self.deleteBarButton.enabled = true;
Run Code Online (Sandbox Code Playgroud)

变暗了:(稍后放置)

self.deleteBarButton.enabled = false;
Run Code Online (Sandbox Code Playgroud)

然后我会添加以下内容使其完全消失:

self.navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.clearColor();
Run Code Online (Sandbox Code Playgroud)


mkz*_*mkz 6

尝试在viewDidLoad中手动创建barButton,然后显示/隐藏按钮。

码:

var barButton: UIBarButtonItem!

func viewDidLoad() {
    super.viewDidLoad()
    barButton = UIBarButtonItem(title: "Title", style: .Plain, target: self, action: Selector("target_function"))
    self.navigationItem.rightBarButtonItem = barButton
}

func someFunction() {
    self.navigationItem.rightBarButtonItem = nil
    // or
    self.navigationItem.rightBarButtonItem = barButton
}
Run Code Online (Sandbox Code Playgroud)