使导航栏标题可以快速点击

时间:2014-12-24 06:56:47

标签: ios swift uinavigationbar

我想让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

3 个答案:

答案 0 :(得分:59)

另一种添加按钮作为导航控制器标题的方法。

您需要将导航项标题视图设置为按钮对象

viewDidLoad()方法中创建按钮对象:

Swift 4.0编辑

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

在这里,您可以看到最后一行按钮直接设置为titleView的{​​{1}},它会在导航栏的中心添加按钮。

按钮的操作方法如下:

navigationItem

答案 1 :(得分:4)

Kampai的答案更新为Swift 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

答案 2 :(得分:0)

要消除该错误,请为if let常量指定类型。我还建议更改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
}