2015-08-14 82 views
19

有沒有任何官方的方法如何設置UIBarButtonItem.enabled屬性?我試圖在前一個控制器中設置一個backButtonItem。但enabled屬性被忽略。如何禁用導航欄中的後退按鈕

更多在這個簡單的example project

我不希望像一些解決方案「使自己的leftBarButtonItem並設置其阿爾法......」

編輯:我不想隱瞞,只能用暗淡的顏色和禁用用戶禁用相互作用。這與禁用leftBarButtonItem的行爲完全相同。

回答

3

如果你想隱藏它,UInavigationItem有一個hidesBackButton屬性。

2

在您的ViewController2.swift類中添加以下代碼。

override func viewDidLoad() { 
     super.viewDidLoad() 

     navigationItem.hidesBackButton = true; 
    } 

它會隱藏您的後退按鈕。

+0

我不想隱藏它,我更新了我的問題。 – Deny

+0

我已嘗試所有可能的選項,但它不可能禁用後退按鈕看鏈接http://stackoverflow.com/questions/25362050/how-to-disable-a-navigation-bar-button-item-in-ios ,要麼你必須創建自定義後退按鈕。 – BKjadav

43

截至今日,無法使用enabled屬性禁用後退按鈕。 backBarButtonItem屬性將爲nil,除非您創建自定義項目,即使這樣它也會忽略enabled屬性。有一些(不令人滿意的)方法可以解決這個問題。

隱藏按鈕

這是蘋果希望你做因爲他們忽視了enabled財產。這很簡單,只要

navigationItem.hidesBackButton = true 

而且應該是首選的方法,除非你有很好的理由。

禁用和色調導航欄

您可以禁用整個導航欄上的用戶互動和色調它使後退按鈕顯示爲禁用。

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

這不,不幸的是,影響其他元素的導航欄,以及因此,如果,例如,你必須在右側另一欄按鈕項目它可能不是一個選項。

使用自定義的左欄按鈕項目

leftBarButtonItem不忽略enabled屬性,因此你可以創建一個自定義項目和手動觸發彈出時被激活。

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

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

但是,這將不具有帶前三角指示器的後槓按鈕樣式。

+0

我不想失去默認背部手勢和領先的三角形指示器。看起來這是不可能的。謝謝你長時間的回答。 – Deny

+1

導航欄userInteractionEnabled = NO在iOS 10上似乎不適用於我?任何人都有這個問題? – Nate

-2

SWIFT 4

使導航項目的@IBOutlet,然後將其禁用:

self.btnBackNavigation.isEnabled = false