如何为某些用户隐藏栏按钮项目
How to hide a bar button item for certain users
我有一个设置栏按钮项(设置为左栏按钮项)。我只想在用户登录时显示它。
我想我可以为匿名用户使用以下内容
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
}
最好的方法就是用图像自定义栏按钮。将 barbuttom.image = nil
设置为隐藏,再次指定要显示的图像。并且不要忘记使栏按钮 isEnabled 为 false。
我有 2 个以上的菜单项,remove/add 菜单项是开销。此代码片段对我有用。
func showMenuItem(){
menuItemQuit.customView?.isHidden = false
menuItemQuit.plainView.isHidden = false
}
func hideMenuItem(){
menuItemQuit.customView?.isHidden = true
menuItemQuit.plainView.isHidden = true
}
if you want to hide/show UIBarButtonItem : For 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
我遇到了同样的困境,不幸的是没有适合我的解决方案。当在多个屏幕上包含多个按钮时,添加和删除按钮以及相关的 segues 是不必要的太多代码。我过去曾对一两个按钮采用这种方法,但很快就变得非常丑陋。
代码 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
按钮显示和消失的两个按钮:
我也遇到了同样的问题,已经解决了。我有一个带图像的条形按钮项目
barbtnClose.isEnabled = false
barbtnClose.image = nil
barbtnClose.customView?.isHidden = true // do not work in iOS 13
Swift 5
更好的解决方案,即使您设置了自定义导航栏也能正常工作。
隐藏导航栏按钮项或后退按钮 leftBarButtonItem / rightBarButtonItem
if login == true {
self.navigationItem.leftBarButtonItem = nil
} else {
print("set your bar button or return")
}
在导航控制器中隐藏后退栏按钮 swift 5
self.navigationItem.leftBarButtonItem = nil
self.navigationItem.hidesBackButton = true
我有一个设置栏按钮项(设置为左栏按钮项)。我只想在用户登录时显示它。
我想我可以为匿名用户使用以下内容
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
}
最好的方法就是用图像自定义栏按钮。将 barbuttom.image = nil
设置为隐藏,再次指定要显示的图像。并且不要忘记使栏按钮 isEnabled 为 false。
我有 2 个以上的菜单项,remove/add 菜单项是开销。此代码片段对我有用。
func showMenuItem(){
menuItemQuit.customView?.isHidden = false
menuItemQuit.plainView.isHidden = false
}
func hideMenuItem(){
menuItemQuit.customView?.isHidden = true
menuItemQuit.plainView.isHidden = true
}
if you want to hide/show UIBarButtonItem : For 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
我遇到了同样的困境,不幸的是没有适合我的解决方案。当在多个屏幕上包含多个按钮时,添加和删除按钮以及相关的 segues 是不必要的太多代码。我过去曾对一两个按钮采用这种方法,但很快就变得非常丑陋。
代码 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
按钮显示和消失的两个按钮:
我也遇到了同样的问题,已经解决了。我有一个带图像的条形按钮项目
barbtnClose.isEnabled = false
barbtnClose.image = nil
barbtnClose.customView?.isHidden = true // do not work in iOS 13
Swift 5
更好的解决方案,即使您设置了自定义导航栏也能正常工作。 隐藏导航栏按钮项或后退按钮 leftBarButtonItem / rightBarButtonItem
if login == true {
self.navigationItem.leftBarButtonItem = nil
} else {
print("set your bar button or return")
}
在导航控制器中隐藏后退栏按钮 swift 5
self.navigationItem.leftBarButtonItem = nil
self.navigationItem.hidesBackButton = true