我有一个设置栏按钮项(设置为左栏按钮项)。我只想在用户登录时显示它。
我以为可以为匿名用户使用以下内容
navigationItem.leftBarButtonItem = nil
但是他们登录后如何显示?
您可以将leftBarButtonItem的副本存储在strong
属性中,并在用户登录后对其进行更新。
var leftBarButtonItem : UIBarButtonItem!
内部viewDidLoad
:
self.leftBarButtonItem = UIBarButtonItem(title: "test", style: UIBarButtonItem.Style.Plain, target: nil, action: nil)
逻辑上:
if loggedIn
{
self.navigationItem.leftBarButtonItem = self.leftBarButtonItem
}
else
{
self.navigationItem.leftBarButtonItem = nil
}
最佳方式就是使用图像自定义Bar按钮。再次将barbuttom.image = nil
设置为“隐藏”,指定要显示的图像。并且不要忘记将barbutton isEnabled设置为false。
我有2个以上的菜单项,而删除/添加菜单项是一项开销。此代码段对我有用。
func showMenuItem(){
menuItemQuit.customView?.isHidden = false
menuItemQuit.plainView.isHidden = false
}
func hideMenuItem(){
menuItemQuit.customView?.isHidden = true
menuItemQuit.plainView.isHidden = true
}
如果您想隐藏/显示UIBarButtonItem:对于Swift 3
在下面的简单代码中使用:
声明:
var doneButton = UIBarButtonItem()
在ViewDidLoad()或ViewWillAppear()中或您要隐藏它的位置:[隐藏栏按钮]
self.navigationItem.rightBarButtonItem = nil
您要显示条形按钮的位置:[在代码中的任何位置使用]
self.navigationItem.rightBarButtonItem = self.doneButton
doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(YourViewController.dismissPicker))
Swift 5.x
我面临同样的困境,不幸的是,没有解决方案对我有用。当在多个屏幕上包含多个按钮时,添加和删除按钮以及相关的命令会不必要地增加代码量。过去,我已经将这种方法用于一个或两个按钮,并且很快变得非常难看。
代码menuItemQuit.customView?.isHidden = false
似乎在iOS 13及更高版本上也不起作用,否则它会使生活变得更加轻松。
我的方法是简单地禁用条形按钮并将其色调更改为导航颜色的色调。
在我的应用程序What.To.Eat中,基于用户的登录状态显示条形按钮。应用程序的每个元素都以主题为主题,因此我可以根据各种因素控制所有颜色。
导航栏的颜色命名为commonButtonColor
,并且条形按钮的色调颜色命名为commonButtonColor
。
当我不得不隐藏一个条形按钮时,我只需执行以下操作:
let nav = self.navigationController?.navigationBar
nav?.tintColor = Theme.shared.titleText
nav?.barTintColor = Theme.shared.headerBg
if person.loggedIn {
mealPrefsBarButton.tintColor = Theme.shared.commonButtonColor
mealPrefsButton.isEnabled = true
} else {
mealPrefsBarButton.tintColor = Theme.shared.headerBg
mealPrefsButton.isEnabled = false
}
在这样的单独文件中定义主题颜色的位置:
static var headerBg: UIColor {
return UIColor(red: 0.965, green: 0.969, blue: 0.973, alpha: 1.00)
}
以上是我在应用程序中所做的简化版本,以使我清楚自己在做什么。我希望这将有助于尝试实现相同目标的人。这是一个简单的解决方案,仅需几行代码即可完美工作。
作为应用程序中的一个示例,这是根据是否选择了My Recipes
按钮而出现和消失两个按钮的方式: