触发 UITapGesture 时从单元格的子视图中获取单元格的引用

Posted

技术标签:

【中文标题】触发 UITapGesture 时从单元格的子视图中获取单元格的引用【英文标题】:Getting the reference of a cell from inside a childview of the cell when a UITapGesture is triggered 【发布时间】:2015-08-11 03:54:45 【问题描述】:

当从特定单元格的子视图中触发 UITapGesture 时,我试图从该单元格中检索数据。我当前的代码以一种我无法判断它是如何计算出来的方式为每个单元返回错误的单元格。有时它会因同一个单元格而改变。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if (segue.identifier == "followerSeg" || segue.identifier == "followingSeg") 
        let vc = segue.destinationViewController as! FollowersFollowingVC
        let x = sender as! UITapGestureRecognizer
        let view = x.view!
        let cellone = view.superview as UIView?
        let cell = cellone?.superview as! PersonCell
        vc.userName = cell.person.profileName
        vc.userId = cell.person.id
        vc.segStatus = segue.identifier == "followerSeg" ? 0 : 1
    

【问题讨论】:

【参考方案1】:

您可能想尝试使用 UITableView 的indexPathForRowAtPoint 方法。我使用 objc/ios 已经 5 年多了,但这是我第一次接触 Swift。请原谅任何语法错误。

假设你有一个名为tableView的属性,代码如下:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if (segue.identifier == "followerSeg" || segue.identifier == "followingSeg") 
        let vc = segue.destinationViewController as! FollowersFollowingVC
        let x = sender as! UITapGestureRecognizer
        let location = x.locationInView(self.tableView) as CGPoint
        let indexPath = self.tableView.indexPathForRowAtPoint(location) as NSIndexPath?
        let cell = self.tableView.cellForRowAtIndexPath(indexPath!) as! PersonCell
        vc.userName = cell.person.profileName
        vc.userId = cell.person.id
        vc.segStatus = segue.identifier == "followerSeg" ? 0 : 1
    

【讨论】:

语法没问题。会投票,但我没有所需的声誉。谢谢。

以上是关于触发 UITapGesture 时从单元格的子视图中获取单元格的引用的主要内容,如果未能解决你的问题,请参考以下文章

选择时从 UITableViewCell 中消失的视图

为单元格的子视图实现不同的用户交互功能

当按钮是iOS中自定义单元格的子视图时,如何动态更改按钮文本?

使用 Auto Layout 创建具有多个不同自定义单元格的 UITableView 具有几乎相同的子视图

点击单元格后不同的 UITableViewCell 子视图布局

TouchesBegan 没有在 UIView 中作为 UITableViewCell 的子视图触发