【发布时间】:2016-08-12 18:51:42
【问题描述】:
您好,我试图在单元格中传递一个变量,当我单击单元格中的按钮时,该变量是标签。但问题是每次我将代码放入 cellForRowAtIndexPath 时,它每次都会从错误的单元格中获取标签。为什么以及如何解决这个问题?
var variableToPass: String!
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : MainCell! = tableView.dequeueReusableCellWithIdentifier("MainCell") as! MainCell
variableToPass = label1.text
cell.label1.userInteractionEnabled = true
let tapButton = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapLabel(_:)))
cell.label1.addGestureRecognizer(tapButton)
return cell as MainCell
}
func tapButton(sender:UITapGestureRecognizer) {
performSegueWithIdentifier("SegueIdentifierName", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "SegueIdentifierName" {
let viewController = segue.destinationViewController as! ViewController
viewController.getVariablePassed = variableToPass
}
}
【问题讨论】:
-
您应该分离出您的代码并将 UITableViewCell 子类化,然后在该子类中创建点击手势识别器。此外,您需要将手势识别器的委托设置为 CELL。
-
你可以使用
didSelectRowAtIndexPath委托方法。 -
@DharmeshKheni 你可以,我一直这样做,但从不这样,总是在 UITableViewCell 的子类中,从不在控制器中
-
是的,你可以这样做。 @Loxx
-
如果你走这条路,将一个块附加到具有暴露属性的单元上,然后可以通过将块设置为弱化自身和弱化单元来将块设置为“tapButton”功能,这是复杂,所以如果这太多了,我不会让你感到困惑,重点是,这是可能的,但不要按照你想要的方式去做
标签: ios swift uitableview uiviewcontroller segue