【问题标题】:Show/Hide barButtonItem [duplicate]显示/隐藏 barButtonItem [重复]
【发布时间】:2015-09-13 18:37:47
【问题描述】:

我正在尝试显示/隐藏UIBarButtonItem。我在storyboard 的右侧添加了一个barButton。然后在viewDidLoad 中,我将rightBarButtonItem 设置为nil。后来,我将其设置为我在storyboard 中添加的button。这是我的代码:

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

// viewDidLoad
self.navigationItem.rightBarButtonItem = nil

// Later on...
self.navigationItem.rightBarButtonItem = self.deleteBarButton

当我将self.deleteBarButton 设置为rightBarButtonItem 时,没有任何反应。它没有显示出来。我做错了什么,显示/隐藏barButtonItem 的正确/最有效方式是什么?

更新

我尝试了以下方法:

self.deleteBarButton.hidden = true

但我收到以下错误:

UIBarButtonItem 没有名为“隐藏”的成员

【问题讨论】:

  • 我已经更新了我的答案
  • 我添加了一种方法来使 barbuttonitem 清晰(因此对用户不可见)
  • 在我的回答中查看“更新 2”

标签: ios swift uibarbuttonitem


【解决方案1】:

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

// viewDidLoad
self.navigationItem.rightBarButtonItem = nil

// Later on...
self.navigationItem.rightBarButtonItem = self.deleteBarButton

【讨论】:

  • 虽然这可行,但有一种更好且受支持的方法可以做到这一点,它支持动画stackoverflow.com/a/5006889/1166266
  • 斯威夫特 3.1 |效果很好 | // viewDidLoad self.rightBarButtonAlert.isEnabled = false self.rightBarButtonAlert.tintColor = .clear
  • @Jessica,,,,, 谢谢...
  • 必须使用强的 IBOutlet,而不是弱的
  • 假设如果我在右侧有两个条形按钮项,我只需要隐藏一个,我该怎么做?
【解决方案2】:

更新 2

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

self.deleteBarButton.title = "";

更新 1

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

这可以作为一个变量让你知道按钮在你的情况下是隐藏的:

发光:(放置在 ViewDidLoad 中)

self.deleteBarButton.enabled = true;

变暗:(稍后放置)

self.deleteBarButton.enabled = false;

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

self.navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.clearColor();

【讨论】:

  • 谢谢。但我必须完全隐藏它
【解决方案3】:

尝试在 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
}

【讨论】:

  • 对于那些单独使用 UINavigationBar(不是控制器版本)的人,您可以添加一个弱 IBOutlet 引用,然后像这样设置右/左栏按钮项目(注意 topItem?-我正在使用navigationBar 作为我的参考名称),其中 barButton 是一个 IBOutlet 参考,或者定义为 @mks:navigationBar.topItem?.setLeftBarButton(barButton, animated: true)
猜你喜欢
  • 2020-05-25
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 2020-01-01
相关资源
最近更新 更多