【问题标题】:How to trigger a button action only when it is pressed for multiple times?如何仅在多次按下按钮时才触发按钮动作?
【发布时间】:2017-12-27 08:30:03
【问题描述】:

我是 Swift 3 的新手。目前,我有一个 UIBarButtonItem。如何使此按钮动作仅在多次按下时才触发?例如,只有当用户按下此按钮两次时才会出现 ViewController。

【问题讨论】:

  • 将 UITapGestureRecognizer 添加到您的 UIBarButtonItem

标签: ios swift3


【解决方案1】:

UIBarButtonItem创建自定义视图并为自定义视图添加UITapGestureRecognizer并将numberOfTapsRequired属性值设置为2

示例代码:

 class viewController: UIViewController {

        var doubleTapGesture: UITapGestureRecognizer!
        var barButton: UIBarButtonItem!
        var button: UIButton!

        override func viewDidLoad() {
            super.viewDidLoad()

            button = UIButton(type: .custom)
            button.setTitle("title", for: .normal)
            button.frame = CGRect(x: 0, y: 0, width: 64, height: 30)

            doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(viewController.buttonClicked))
            doubleTapGesture.numberOfTapsRequired = 2

            button.addGestureRecognizer(doubleTapGesture)

            barButton = UIBarButtonItem(customView: button);
            navigationItem.rightBarButtonItem = barButton
        }

        func buttonClicked() {
            // Method for UITapGestureRecognizer
        }
    }

【讨论】:

    【解决方案2】:

    使用 UIButton 而不是 UIBarButtonItem 并定义它的“Touch Down Repeat”事件而不是“Touch Up Inside”。 双击按钮时,Touch Down 重复触发。

    查看下图以供参考

    【讨论】:

      【解决方案3】:

      只需添加 UITapGestureRecognizer 到您的 UIBarButtonItem 如下所示。

      func addBarButton() -> UIBarButtonItem
      {
              let btnImage    = UIImage(named: "imageName")!
              let imageButton : UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
              imageButton.setBackgroundImage(btnImage, for: UIControlState())
      
              let doubleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.buttonAction(_:)))
              doubleTap.numberOfTapsRequired = 2
              imageButton.addGestureRecognizer(doubleTap)
      
              return UIBarButtonItem(customView: imageButton)
      }
      

      从您的 viewDidLoad 函数中调用下面的代码。

      navigationItem.rightBarButtonItems  = [addBarButton()]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-21
        • 2019-12-29
        • 1970-01-01
        相关资源
        最近更新 更多