在Swift中,检测UITableViewCell部分的Tap

时间:2015-02-16 17:01:04

标签: ios uitableview swift

希望这对iOS / Swift开发人员来说是一个简单的问题。我有一个UITableViewCell,左边是文本,右边是图像。如果用户点击该行,我会做一些事情并且工作得很好。但是,如果用户点击图像,我需要做其他事情。我看了Detect Tap on UIImageView within UITableViewCell,但我没有把Objective-C很好地翻译成Swift。

我的假设是我需要在我的子类UITableViewCell中执行类似的操作:

@IBOutlet var handsfreeImage: UIImageView!

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    let handsfreeTap = UITapGestureRecognizer(target: handsfreeImage, action:Selector("handsfreeTap:"))
}

func handsfreeTap(recognizer: UITapGestureRecognizer) {
    println("The handsfree image was tapped")
}

但是,这不起作用。关于我做错了什么的想法?

3 个答案:

答案 0 :(得分:4)

您没有正确使用UITapGestureRecognizer

target应该是实现处理程序方法的类。

所以它应该是

let handsfreeTap = UITapGestureRecognizer(target: self, action:Selector("handsfreeTap:"))

然后,您需要将手势识别器添加到视图中。

handsfreeImage.addGestureRecognizer(handsfreeTap)

这一切都应该有效。它可能仍然没有按照您想要的方式运行,因为它会缺少一些功能,例如长保持和点按高亮显示。如果这些是您关心的事情,我建议您只使用UIButton image背景而不是UIImageView,因为它会在内部处理所有内容而无需您处理

答案 1 :(得分:2)

您创建了识别器,但仍需要将其添加到视图中。所以

whateverYourImageViewIs.addGestureRecognizer(handsfreeTap)

答案 2 :(得分:2)

所以,我从来没有能够使UITapGestureRecognizer方法工作(这很难过,因为我认为这是一个优雅的解决方案)。所以,我最终使用了委托方法:

protocol HandsFreeTapCellDelegate {
    func handsFreeTap(handsFreeButton: VehicleTableViewCell)
}

class VehicleTableViewCell: UITableViewCell {

    var delegate : HandsFreeTapCellDelegate?

    @IBAction func handsFreeTap(sender: UIButton) {
        delegate?.handsFreeTap(self)
    }
}

class FooViewController: UIViewController, HandsFreeTapCellDelegate, UITableViewDelegate, UITableViewDataSource {
    func handsFreeTap(handsFreeButton: VehicleTableViewCell) {
        println("handsfreeButton was tapped, the row is: \(handsFreeButton.tag)")
    }
}