如何隐藏某些用户的栏按钮项

时间:2015-01-11 12:47:17

标签: ios swift uibarbuttonitem

我有一个设置栏按钮项(设置为左栏按钮项)。我只想在用户登录时显示它。

我认为我可以将以下内容用于匿名用户

navigationItem.leftBarButtonItem = nil

但是,一旦他们登录,我将如何显示它?

7 个答案:

答案 0 :(得分:35)

您可以将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
}

答案 1 :(得分:5)

Best Way只是定制你的Bar buttom with image。将barbuttom.image = nil设置为隐藏,再次指定要显示的图像。并且不要忘记将barbutton isEnabled设为false。

答案 2 :(得分:2)

我有更多2个菜单项并删除/添加menuitem是一个开销。这段代码片段对我有用。

func showMenuItem(){

    menuItemQuit.customView?.isHidden = false
    menuItemQuit.plainView.isHidden = false
}

func hideMenuItem(){

    menuItemQuit.customView?.isHidden = true
    menuItemQuit.plainView.isHidden = true
}

答案 3 :(得分:1)

  

如果你想隐藏/显示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))

答案 4 :(得分:1)

我遇到了同样的问题并解决了。我有一个带有图像的条形按钮项

barbtnClose.isEnabled = false
barbtnClose.image = nil

barbtnClose.customView?.isHidden = true // do not work in iOS 13

答案 5 :(得分:0)

Swift 5.x

我面临着同样的困境,不幸的是,没有解决方案对我有用。当在多个屏幕上包含多个按钮时,添加和删除按钮以及相关的命令会不必要地增加代码量。过去,我曾经将这种方法用于一个或两个按钮,但很快变得非常难看。

代码menuItemQuit.customView?.isHidden = false似乎也不能在iOS 13及更高版本上运行,否则它将使工作变得更加轻松。

我的方法是简单地禁用条形按钮并将其色调更改为导航颜色的色调。

在我的应用程序中吃什么,我根据用户的登录状态显示条形按钮。应用程序的每个元素都是主题主题,以便我可以根据各种因素控制所有颜色。

导航栏的颜色命名为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按钮来显示和消失两个按钮的方式:

enter image description here enter image description here

答案 6 :(得分:0)

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