在表格视图中点击按钮 - 错误的单元格

Posted

技术标签:

【中文标题】在表格视图中点击按钮 - 错误的单元格【英文标题】:Tap button in tableview - wrong cell 【发布时间】: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”功能,这是复杂,所以如果这太多了,我不会让你感到困惑,重点是,这是可能的,但不要按照你想要的方式去做 【参考方案1】:

您的代码设置方式,variableToPass 始终是从dequeueReusableCellWithIdentifier 获取的最后一个单元格中的文本。相反,请在您的 tapButton 方法中设置 variableToPass,因为这样您就知道选择了哪个单元格并且您可以正确设置 variableToPass

func tapButton(sender:UITapGestureRecognizer) 
    let label = sender.view as! UILabel
    self.variableToPass = label.text
    performSegueWithIdentifier("SegueIdentifierName", sender: self)

【讨论】:

【参考方案2】:

我的方法是使用单元格委托并将我的 viewController 注册为单元格的委托,稍后当用户点击 UIButton 时,我将调用类似

的方法

- (void)buttonWasPressedWithIndexPath:(NSIndexpath*)indexPath

在 cellForRowAtIndexPath 中,我将 indexPath 作为单元格属性传递

【讨论】:

以上是关于在表格视图中点击按钮 - 错误的单元格的主要内容,如果未能解决你的问题,请参考以下文章

在表格视图单元格按钮上查看表格视图单元格文本

表格视图中的按钮没有响应其单元格编号

快速点击按钮时将单元格添加到表格视图

当按钮覆盖在表格视图顶部时,如何防止表格视图单元格注册点击?

UI测试滑动删除表格视图单元格

点击保存按钮并存储在字典中时获取表格视图单元格中的文本字段?