我想知道如何在以下number(indexPath.row)
函数中获取单元格tapPickView
。 topView
位于UITableViewCell
,pickView
位于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)
}
答案 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
委托方法。