web-dev-qa-db-ja.com

特定のユーザーに対してバーボタンアイテムを非表示にする方法

設定バーボタン項目があります(左バーボタン項目として設定)。ユーザーがログインしている場合にのみ表示したい。

匿名ユーザーには以下を使用できると思いました

navigationItem.leftBarButtonItem = nil

しかし、ログインしたらすぐにそれをどのように表示しますか?

16
grabury

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
}
37
rakeshbs

Best Wayは、画像付きのバーボタンをカスタムするだけです。 barbuttom.image = nilを非表示に設定して、表示する画像を再度割り当てます。また、barbuttonをfalseに設定することを忘れないでください。

5
jeff ayan

2つ以上のメニューアイテムがあり、メニューアイテムの削除/追加はオーバーヘッドです。このコードスニペットは私にとってはうまくいきました。

func showMenuItem(){

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

func hideMenuItem(){

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

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))
1
Kiran jadhav

Swift 5.x

私は同じジレンマに直面しましたが、残念ながら解決策はありませんでした。複数の画面に複数のボタンが含まれている場合、ボタンと関連するセグエの追加と削除は、コードが不必要に多すぎます。私は過去に1つまたは2つのボタンにこのアプローチを採用しており、かなり醜くかなり速くなります。

コード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ボタンが選択されているかどうかに基づいて、2つのボタンが表示および非表示になる方法を次に示します。

enter image description hereenter image description here

0
zeeshan