設定バーボタン項目があります(左バーボタン項目として設定)。ユーザーがログインしている場合にのみ表示したい。
匿名ユーザーには以下を使用できると思いました
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
}
Best Wayは、画像付きのバーボタンをカスタムするだけです。 barbuttom.image = nil
を非表示に設定して、表示する画像を再度割り当てます。また、barbuttonを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
私は同じジレンマに直面しましたが、残念ながら解決策はありませんでした。複数の画面に複数のボタンが含まれている場合、ボタンと関連するセグエの追加と削除は、コードが不必要に多すぎます。私は過去に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つのボタンが表示および非表示になる方法を次に示します。