2014-12-24 65 views
16

我想使navigationbar標題可點擊。當用戶點擊它時,它應該執行一個segue。但我不知道如何做到這一點。使導航欄標題可點擊快速

我已經嘗試了以下獲取標題並將Tap應用於其中。

var subviews = self.navigationController?.navigationBar.subviews 
     if let subviews = subviews { 
      // Better check for array length before accessing to the 1st element 
      var subview = subviews [0] 
     } 

但它給我的錯誤Variable subview inferred to have type AvyObject, which may be unexpected

回答

47

另一種方法來添加按鈕作爲導航控制器的標題。

您需要導航項目標題視圖設置爲您的按鈕對象

viewDidLoad()方法創建按鈕對象:

雨燕3.0編輯

let button = UIButton(type: .custom) 
button.frame = CGRect(x: 0, y: 0, width: 100, height: 40) 
button.backgroundColor = UIColor.red 
button.setTitle("Button", for: .normal) 
button.addTarget(self, action: #selector(self.clickOnButton), for: .touchUpInside) 
self.navigationItem.titleView = button 

在這裏,您可以在最後一行看到按鈕直接設置爲navigationItemtitleView,該按鈕將在導航欄的中心添加按鈕。

的按鈕操作方法如下:

func clickOnButton(button: UIButton) { 
} 
+1

我嘗試了使用UILabel和輕拍手勢等幾種方式,但最重要的是這種解決方案是最簡潔,最有效的方式。 – Bigair

+0

如果您喜歡故事板:您還可以添加一個IBOutlet,然後將titleView設置爲此IBOutlet。 self.navigationItem.titleView = titleButton – Pbk

0

要擺脫那種錯誤的,指定的if let常數的類型。我還建議改變這個常數名稱,因爲它與前一行中已經聲明的相同。

var subviews = self.navigationController?.navigationBar.subviews 
if let subviewArray:NSArray = subviews { 
    // Better check for array length before accessing to the 1st element 
    var subview:UILabel = subviewArray[0] // <-- If the subview's a UILabel 
} 
+0

它仍然給我同樣的問題。 –

+0

@AtifFarrukh同樣的錯誤信息? –

+0

是的,相同的消息 –

3

Kampai的回答更新的斯威夫特3:

let button = UIButton(type: .custom) 
button.frame = CGRect(x: 0, y: 0, width: 100, height: 40) 
button.setTitle("Button", for: .normal) 
button.addTarget(self, action: #selector(self.clickOnButton), for: .touchUpInside) 
self.navigationItem.titleView = button 
1

我可以證實 「Kampai的回答更新的斯威夫特3:」 爲Xcode的9還 作品/ iOS11:

private func setTouchable(title: String){ 
      let button = UIButton(type: .custom) 
      button.frame = CGRect(x: 0, y: 0, width: 80, height: 40) 
      button.setTitle(title, for: .normal) 
      button.addTarget(self, 
      action: #selector(self.btnAction), 
      for: .touchUpInside) 
      self.navigationItem.titleView = button 
     } 



     @objc func btnAction(sender: Any){ 
      print("Got it!"); 
     } 


.... 
// for example in viewDidLoad: 
      setTouchable(title: "TOUCHME")