UITapGestureRecognizer 干扰 UISlider

Posted

技术标签:

【中文标题】UITapGestureRecognizer 干扰 UISlider【英文标题】:UITapGestureRecognizer interferes with UISlider 【发布时间】:2015-09-24 09:28:47 【问题描述】:

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

但是我用 swift 编码,所以我需要一个 swift 的解决方案。

在我的项目中发生的事情是这样的: 我有一个ViewController,用户在屏幕上点击,将执行一个segue。但是我在这个视图控制器上有一个UISlider,当用户“释放”滑块时,它有时(为什么有时而不是总是让我感到困惑)被识别为屏幕上的点击。

所以我知道我必须防止手势识别器“看到/识别”触摸UIslider

但是我该如何防止呢? (在 swift 2.0 中,使用 Xcode7。但如果您在答案中使用早期的 swift 编码,我也能理解) 我对快速编码相当陌生。希望有人能帮忙!

这是视图控制器中的代码:

// 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)


(编辑:)我用我在 *** 上找到的信息更新了我的代码。我加了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` 函数永远不会从控制台调用。那么我错过了什么?我是否正确设置了委托?

【问题讨论】:

***.com/questions/4765661/… 【参考方案1】:

永远不会调用“shouldReceiveTouch”函数,因为您在“shouldReceiveTouch”函数中设置了委托。在调用函数之前,需要将委托设置为 self。 您需要做的是在 viewDidLoad() 中设置委托,一切都应该没问题。

override func viewDidLoad() 
  super.viewDidLoad()

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

【讨论】:

我自己今天才发现这一点。这是对的。谢谢! 哦,我使用了 if touch.view is UISlider return false 语法,它适用于 swift2.0

以上是关于UITapGestureRecognizer 干扰 UISlider的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 不适用于 UIView 动画

使用 UITapGestureRecognizer 无法识别的选择器

UIlabel 中的 UITapGestureRecognizer 错误

UITapGestureRecognizer 的问题

带有点击事件的 UITapGestureRecognizer

UIButton 上的 UITapGestureRecognizer