web-dev-qa-db-ja.com

ナビゲーションバーの戻るボタンを無効にする方法

UIBarButtonItem.enabledプロパティを設定する公式の方法はありますか?前のコントローラーでbackButtonItemを設定しようとしました。ただし、enabledプロパティは無視されます。

このシンプルな詳細 サンプルプロジェクト

「独自のleftBarButtonItemを作成し、そのアルファを設定する」などの解決策は望まない。

編集:非表示にするのではなく、淡色で無効にし、ユーザー操作を無効にします。無効なleftBarButtonItemとまったく同じ動作です。

33
Deny

現在、enabledプロパティを使用して戻るボタンを無効にすることはできません。カスタムアイテムを作成しない限り、backBarButtonItemプロパティはnilになり、enabledプロパティは無視されます。これを回避する方法はいくつかあります(満足のいくものではありません)。

ボタンを隠す

これは、Appleがenabledプロパティを無視することを考えると、あなたにしたいことです。これは、

navigationItem.hidesBackButton = true  

適切な理由がない限り、推奨されるアプローチである必要があります。

ナビゲーションバーを無効にして色を付ける

ナビゲーションバー全体でユーザーの操作を無効にし、色を付けて戻るボタンが無効になっているように表示できます。

navigationController?.navigationBar.userInteractionEnabled = false
navigationController?.navigationBar.tintColor = UIColor.lightGrayColor()

残念ながら、これはナビゲーションバーの他の要素にも影響するため、たとえば、右側に別のバーボタンアイテムがある場合はオプションではない可能性があります。

カスタム左バーボタンアイテムを使用する

leftBarButtonItemenabledプロパティを無視しないため、カスタム項目を作成し、アクティブになったときにポップを手動でトリガーできます。

navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(ThisClass.backButtonTapped))
...
navigationItem.leftBarButtonItem?.enabled = false

func backButtonTapped() {
    self.navigationController?.popViewController(animated: true)
}

ただし、これには、先​​頭に三角形のインジケータが付いたバックバーボタンスタイルはありません。

68
hennes

ViewController2.Swiftクラスに以下のコードを追加します。

override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.hidesBackButton = true;
    }

戻るボタンが非表示になります。

7
BKjadav

非表示にする場合、UInavigationItemにはhidesBackButtonプロパティがあります。

4
Templar