在Swift中检测UIImageView的触摸

17
当用户点击一个 UIImageView 时,如何检测并执行操作?以下是目前的代码:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    var touch: UITouch = UITouch()
    if touch.view == profileImage {
        println("image touched")
    }
}

3
请确认userInteractionEnabled属性已被设置为true。我相信UIImageView的默认值是false - AdamPro13
@AdamPro13,使用我上面的代码仍然无法正常工作。 - Stefan DeClerck
3个回答

26

您可以通过为UIImageView添加UITapGestureRecognizer来检测触摸。

需要注意的是,默认情况下,UIImageViewisUserInteractionEnabled属性被设置为false,因此您必须在storyboard或编程中显式设置它。


override func viewDidLoad() {
    super.viewDidLoad()

    imageView.isUserInteractionEnabled = true
    imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(imageTapped)))
}

@objc private func imageTapped(_ recognizer: UITapGestureRecognizer) {
    print("image tapped")
}

22

您可以在Interface Builder或代码中将UITapGestureRecognizer放入UIImageView中(根据您的喜好),我更偏好前者。然后,您可以放置一个@IBAction并处理UIImageView内的点击事件,不要忘记在Interface Builder或代码中将UserInteractionEnabled设置为true

@IBAction func imageTapped(sender: AnyObject) {
    println("Image Tapped.")
}

我希望这可以帮助你。


我该如何在“imageTapped”函数中传递额外的参数? - Abhishek

8

Swift 3

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch:UITouch = touches.first!
        if touch.view == profileImage {
    println("image touched")
}

}


override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch:UITouch = touches.first!
        if touch.view == profileImage {
    println("image released")
}

}

1
需要在viewDidLoad()方法中添加profileImage.isUserInteractionEnabled = true。 - Thirumalvalavan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接