使用UIBarButtonItem,点击事件无法触发。
原因是点击事件被UIGestureRecognizer 所覆盖,点击事件无法传递下去。
两种解决方式。
第一种:
设置cancelsTouchesInView属性。
cancelsTouchesInView默认为true,当属性为true时会只响应touch事件,该触摸也就不会继续在事件传递链传递下去。当设置为false时则不会终止事件传递,touch事件和点击事件都会触发。
let tapGestureRecognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTapGesture))
tapGestureRecognizer.cancelsTouchesInView = false
self.view.addGestureRecognizer(tapGestureRecognizer)
//单击手势响应
@objc func handleTapGesture() {
print("测试")
}
第二种:
手动生成按钮,指定点击方法
var navigationBar:UINavigationBar?
var titleTxt = "我的设备"
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.isNavigationBarHidden=true
//实例化导航条
navigationBar = UINavigationBar(frame: CGRect(x:0, y:20, width:self.view.frame.size.width, height:60))
self.view.addSubview(navigationBar!)
navigationBar?.pushItem(navItem(), animated: false)
// Do any additional setup after loading the view.
}
@objc func navItem() -> UINavigationItem{
// 创建导航栏组件
let navItem = UINavigationItem()
//生成按钮,事件设置为点击后触发
let rightButton = UIButton(type: UIButtonType.custom)
rightButton.frame = CGRect(x: 0, y: 0, width: 33, height: 32)
rightButton.addTarget(self, action: #selector(test_clicked(_:)), for: UIControlEvents.touchUpInside)
let rightItem = UIBarButtonItem(customView: rightButton)
// 自定义导航栏的title,用UILabel实现
let titleLabel = UILabel(frame: CGRect(x:0,y:0,width:50,height:60))
titleLabel.text = titleTxt
// 设置自定义的title
navItem.titleView = titleLabel
navItem.setRightBarButton(rightItem, animated: true)
return navItem
}
@objc func test_clicked(_ sender: AnyObject) {
print("测试")
}
网友评论