如何将单元格编号发送到TableViewCell

时间:2015-07-16 06:53:42

标签: ios swift

我想知道如何在以下number(indexPath.row)函数中获取单元格tapPickViewtopView位于UITableViewCellpickView位于topView。如果点按pickView,则会激活tapPickView

override func tableView(tableView: UITableView,
                        cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier(
               "QuestionAndAnswerReuseIdentifier",
               forIndexPath: indexPath) as! QuestionAndAnswerTableViewCell

    cell.topView.pickView.userInteractionEnabled = true
    var tap = UITapGestureRecognizer(target: self, action: "tapPickView")
    cell.topView.pickView.addGestureRecognizer(tap)
    return cell
}

func tapPickView() {
    answerQuestionView = AnswerQuestionView()
    answerQuestionView.questionID = Array[/*I wanna put cell number here*/]

    self.view.addSubview(answerQuestionView)
}

3 个答案:

答案 0 :(得分:1)

假设这不像didSelectRowAtIndexPath那么简单,我强烈建议您首先查看,将信息传递给您的方法可能如下所示:

@IBAction func tapPickView:(sender: Anyobject) {
    if let cell = sender as? UITableViewCell {
        let indexPath = self.tableView.indexPathForCell(cell: cell)
        println(indexPath)
    }
}

答案 1 :(得分:1)

首先,您需要在添加手势识别器时将:符号附加到选择器,以便将pickView作为其参数。

var tap = UITapGestureRecognizer(target: self, action: "tapPickView:")

除此之外,单元格是可重用的对象,因此您应该通过删除以前添加的对象来防止一次又一次地向同一个视图实例添加相同的手势。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("QuestionAndAnswerReuseIdentifier", forIndexPath: indexPath) as! QuestionAndAnswerTableViewCell
    cell.topView.pickView.userInteractionEnabled = true
    cell.topView.pickView.tag = indexPath.row

    for recognizer in cell.topView.pickView.gestureRecognizers ?? [] {
        cell.topView.pickView.removeGestureRecognizer(recognizer)
    }

    cell.topView.pickView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "tapPickView:"))

    return cell
}

在填充单元格时,您可以将tag的{​​{1}}值设置为pickView,以便您可以通过indexPath.row轻松查询。

cellForRowAtIndexPath(_:)

假设您已经知道要点击的单元格部分。我们说它是 0

cell.topView.pickView.tag = indexPath.row

希望这有帮助。

答案 2 :(得分:0)

使用didSelectRowAtIndexPath委托方法。