Swift - 将手势识别器添加到表格单元格中的对象

Posted

技术标签:

【中文标题】Swift - 将手势识别器添加到表格单元格中的对象【英文标题】:Swift - add gesture recognizer to object in table cell 【发布时间】:2015-08-29 19:53:44 【问题描述】:

我正在尝试将手势识别器添加到表格视图单元格中的对象(特别是图像)。现在,我对手势识别器很熟悉,但是对于如何设置它有点困惑。实际的表格单元格没有 viewDidLoad 方法,所以我认为我不能在那里声明手势识别器。

这个问题 (UIGestureRecognizer and UITableViewCell issue ) 似乎是相关的,但答案是在目标 C 中,不幸的是我只精通 swift。

如果有人可以帮助我了解如何将手势识别器添加到表格单元格中的对象(不是整个表格视图),或者甚至可以帮助我将上述链接中的答案翻译成 swift ,不胜感激

【问题讨论】:

【参考方案1】:

这是链接帖子解决方案的快速 Swift 翻译,将滑动手势识别器添加到 UITableView,然后确定滑动发生在哪个单元格上:

class MyViewController: UITableViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
        var recognizer = UISwipeGestureRecognizer(target: self, action: "didSwipe")
        self.tableView.addGestureRecognizer(recognizer)
    

    func didSwipe(recognizer: UIGestureRecognizer) 
        if recognizer.state == UIGestureRecognizerState.Ended 
            let swipeLocation = recognizer.locationInView(self.tableView)
            if let swipedIndexPath = tableView.indexPathForRowAtPoint(swipeLocation) 
                if let swipedCell = self.tableView.cellForRowAtIndexPath(swipedIndexPath) 
                    // Swipe happened. Do stuff!
                
            
        
    


【讨论】:

虽然两个答案都是正确的,但我还是选择了这个,因为它更完整。非常感谢你:)【参考方案2】:

给你。您在问题中提到的解决方案的 Swift 版本

"不用直接将手势识别器添加到单元格中,您可以将其添加到viewDidLoad中的tableview中。

在didSwipe-Method中可以确定受影响的IndexPath和cell如下:"

func didSwipe(gestureRecognizer:UIGestureRecognizer) 
    if gestureRecognizer.state == UIGestureRecognizerState.Ended 
        let swipeLocation = gestureRecognizer.locationInView(self.tableView)
          if let swipedIndexPath = self.tableView.indexPathForRowAtPoint(swipeLocation)
            if let swipedCell = self.tableView.cellForRowAtIndexPath(swipedIndexPath!)


      
    
  

【讨论】:

【参考方案3】:

Swift 4 更新:

let swipeGestueRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(didRecognizeSwipeGestue(_:)))
self.view.addGestureRecognizer(swipeGestueRecognizer)

还有选择器:

@objc func didRecognizeSwipeGestue(_ sender: UISwipeGestureRecognizer) 

    if sender.state == UIGestureRecognizerState.ended 
        let location = sender.location(in: self.tableView)
        if let indexPath = tableView.indexPathForRow(at: location) 
            if let cell = self.tableView.cellForRow(at: indexPath) 
                // todo
            
        
    

【讨论】:

以上是关于Swift - 将手势识别器添加到表格单元格中的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何将手势识别器添加到collectionview单元格中的uiview

如何从表格视图单元格中的图像手势获取 indexPath

表格视图单元格中 UIView 上的手势识别器

我可以在 tableviewcell 中发现 tableview 手势识别器的状态吗

如何将手势识别器添加到 UITableViewCell 的 UIImage 和 UIButton?

Swift 3使用选择器将按钮/手势识别器动作传递给其他功能