美文网首页
swift 实机测试时导航栏按钮失效

swift 实机测试时导航栏按钮失效

作者: 明朝_5193 | 来源:发表于2018-04-30 22:06 被阅读0次

    使用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("测试")

    }

    相关文章

      网友评论

          本文标题:swift 实机测试时导航栏按钮失效

          本文链接:https://www.haomeiwen.com/subject/tkzbkftx.html