当用户在tableView Cell中点击它时,我如何获得特定子视图的索引

时间:2017-06-30 16:56:28

标签: ios swift

我有一个包含多个部分的表格视图 我想知道用户点击itemImage时的indexPath。

class ItemCell:UITableViewCell{
   @IBOutlet weak var itemImage:UIImageView!
   @IBOutlet weak var itemName:UILabel!

}

3 个答案:

答案 0 :(得分:2)

cellForRow中,将点击操作添加到UIImageView并传递tapGestureRecognizer,用于在点击处理函数中获取点按的图片视图

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell") as! ItemCell

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
    cell.itemImage.isUserInteractionEnabled = true
    cell.itemImage.addGestureRecognizer(tapGestureRecognizer)

    return cell
}

然后在处理程序函数中,您可以获取图像视图。因此,您的图像视图位于内容视图中,然后该视图位于单元格中。因此,您可以通过调用parent来获取单元格,然后进一步获取indexPath

func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
    let tappedImage = tapGestureRecognizer.view as! UIImageView
    if let cell = tappedImage.superview?.superview as? ItemCell{
        let indexPath = self.YourTableView.indexPath(for: cell)
    }
    //... other code here
}

答案 1 :(得分:0)

在此函数中传递ItemImage和TableView实例

func viewIndexPath(subView:UIView , tableView:UITableView)->IndexPath?{
     let subViewPosition = subView.convert(subView.frame ,to:tableView)
     if let indexPath = tableView.indexPath(at:subViewPosition){
        return indexPath
     }

   return nil
}

答案 2 :(得分:0)

您要做的是向if (owed <= 0.001 && owed >= -0.001) { printf("You need %i coins\n", coins); } 添加delegate并在单元格内创建cell,如此

protocol

protocol ItemCellProtocol { func didSelectCell(cell: ItemCell) } 内有viewController的{​​{1}}应该向此tableView确认并实施此方法。

添加

protocol

var delegate: ItemCellProtocol?

每次ItemCell dequeue ItemCelldelegate属性设置为self

然后在cell内添加一个方法来收听imageTapped

func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {  { 
    delegate?.didSelectCell(self)
}

这将在viewController中触发您的方法,并在该方法中将项目单元格的引用传递给它,只需在表格视图上调用indexPathForCell方法,您就会拥有{{ 1}}