我想让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
答案 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
}