【问题标题】:on single tap UIBarButton display toast and on double tap back action need to perform单击 UIBarButton 显示 toast 和双击返回操作需要执行
【发布时间】:2018-04-03 10:28:10
【问题描述】:

我在导航栏中有一个 UIBarButton,点击后退按钮(第一次点击)我需要显示 toast(如警告),双击我需要快速退出页面,

以下用于显示 toast 的代码,其工作正常,

let toastLabel = UILabel(frame: CGRect(x: 20, y: self.view.frame.size.height-100, width: 350, height: 35))
    toastLabel.backgroundColor = UIColor.black.withAlphaComponent(0.6)
    toastLabel.textColor = UIColor.white
    toastLabel.textAlignment = .center;
    toastLabel.font = UIFont(name: "Montserrat-Light", size: 12.0)
    toastLabel.text = "demo"
    toastLabel.alpha = 1.0
    toastLabel.layer.cornerRadius = 10;
    toastLabel.clipsToBounds  =  true
    self.view.addSubview(toastLabel)
    UIView.animate(withDuration: 2.0, delay: 0.1, options: .curveEaseOut, animations: {
        toastLabel.alpha = 0.0
    }, completion: {(isCompleted) in
        toastLabel.removeFromSuperview()
    })

请指导我完成这项任务。

【问题讨论】:

    标签: ios swift3 navigationbar


    【解决方案1】:

    在 UIButton 上为控件事件 UIControlEventTouchDownRepeat 添加一个 target-action,并且仅当触摸的 tapCount 为 2 时才执行操作。如下面的 Swift 3 中

    button.addTarget(self, action: #selector(multipleTap(_:event:)), for: UIControlEvents.touchDownRepeat)
    

    然后添加如下选择器

    func multipleTap(_ sender: UIButton, event: UIEvent) {
        let touch: UITouch = event.allTouches!.first!
        if (touch.tapCount == 2) {
            // do action.
        }
    }
    

    【讨论】:

      【解决方案2】:
      override func viewDidLoad() {
              super.viewDidLoad()
      
              self.navigationItem.hidesBackButton = true
              let button = UIButton(type: .system)
              button.frame = CGRect(x: 0, y: 0, width: 80, height: 40)
              button.setTitle("Back", for: .normal)
      
              //Gesture Recognizer
              let singleTap = UITapGestureRecognizer(target: self, action: #selector(handleSingleTap))
              singleTap.numberOfTapsRequired = 1
              let doubleTap = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap))
              doubleTap.numberOfTapsRequired = 2
              button.addGestureRecognizer(singleTap)
              button.addGestureRecognizer(doubleTap)
              singleTap.require(toFail: doubleTap)
      
              let barButton = UIBarButtonItem(customView: button)
              self.navigationItem.leftBarButtonItem = barButton
          }
          @objc func handleSingleTap(sender: UITapGestureRecognizer? = nil) {
              let toastLabel = UILabel(frame: CGRect(x: 20, y: self.view.frame.size.height-100, width: 350, height: 35))
              toastLabel.backgroundColor = UIColor.black.withAlphaComponent(0.6)
              toastLabel.textColor = UIColor.white
              toastLabel.textAlignment = .center;
              toastLabel.font = UIFont(name: "Montserrat-Light", size: 12.0)
              toastLabel.text = "demo"
              toastLabel.alpha = 1.0
              toastLabel.layer.cornerRadius = 10;
              toastLabel.clipsToBounds  =  true
              self.view.addSubview(toastLabel)
              UIView.animate(withDuration: 2.0, delay: 0.1, options: .curveEaseOut, animations: {
                  toastLabel.alpha = 0.0
              }, completion: {(isCompleted) in
                  toastLabel.removeFromSuperview()
              })
              print("Single Tap detected")
          }
          @objc func handleDoubleTap(sender: UITapGestureRecognizer? = nil) {
              print("Double Tap detected")
          }
      

      【讨论】:

        【解决方案3】:

        使用UIControlEventTouchDownRepeat 事件,当tapCount2 时执行操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-15
          • 2016-03-26
          • 1970-01-01
          相关资源
          最近更新 更多