UITapGestureRecognizer会干扰UISlider

时间:2015-09-24 09:28:48

标签: ios swift uigesturerecognizer uislider uitapgesturerecognizer

我遇到了与手势相关的问题,有点类似于:gesture-problem-uiswipegesturerecognizer-uislider

但是我在swift中编码,所以我需要一个快速的解决方案。

我的项目中发生了什么: 我有一个ViewController,用户在屏幕上轻击,将执行一个segue。但是我在这个viewcontroller上有一个UISlider,当用户发布'滑块有时(为什么有时候并不总是让我感到困惑)被识别为屏幕上的点按。

所以我理解我必须防止手势识别器看到/识别出来。触及UIslider

但我该如何防止这种情况? (在swift 2.0中,使用Xcode7。但如果你在答案中使用更早的swift编码,我也理解它) 我对swift编码很新。我希望有人可以帮忙!

以下是viewcontroller中的代码:

// The slider 
@IBOutlet weak var sliderValue: UISlider!

@IBAction func sliderValueChanged(sender: UISlider) {
// Do stuff
}

// UITapGestureRecognizer
override func viewDidLoad() {
    super.viewDidLoad()

let touch = UITapGestureRecognizer(target: self, action: "touched:")
        self.view.addGestureRecognizer(touch)
}

// Perform Segue
func touched (_: UIGestureRecognizer) {

    //Segue to another viewcontroller
    performSegueWithIdentifier("nice", sender: self)

}

(编辑:)我用stackoverflow上的信息更新了我的代码。我添加了UIGestureRecognizerDelegate

    class LampOn: UIViewController, UIGestureRecognizerDelegate {...}

我添加了shouldReceiveTouch

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {

    gestureRecognizer.delegate = self
    if (touch.view == sliderValue){
        print("touching slider")
        return false
    }
    else{
        print("touching elsewhere")
        return true
    }

}

但是' shouldReceiveTouch` func永远不会从控制台调用。那我错过了什么?我是否正确设置了代理?

1 个答案:

答案 0 :(得分:1)

" shouldReceiveTouch"函数永远不会被调用,因为你在" shouldReceiveTouch"中设置了委托。功能。在调用函数之前,需要将委托设置为self。

你需要做的是在viewDidLoad()中设置委托,一切都应该没问题。

override func viewDidLoad() {
  super.viewDidLoad()

  let touch = UITapGestureRecognizer(target: self, action: "touched:")
    self.view.addGestureRecognizer(touch)
    touch.delegate = self
}