2016-08-12 79 views
0

嗨我试图在单元格中传递一个变量,当单击单元格中的按钮时,该变量是标签。但问题是每次将代码放入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 
    } 
} 
+0

您应该分离出你的代码和子类的UITableViewCell,然后在子类中创建点击手势识别器。此外,您需要将手势识别器的代表设置为CELL。 – Loxx

+0

您可以使用'didSelectRowAtIndexPath'委托方法。 –

+0

@DharmeshKheni你可以,我一直这样做,但从来没有像这样,总是在UITableViewCell的子类中,从来没有在控制器 – Loxx

回答

0

我的方式做到这一点是使用电池代表和注册我的viewController为代表的细胞,后来当用户点按的UIButton我会打电话给喜欢

- (void)buttonWasPressedWithIndexPath:(NSIndexpath*)indexPath

的方法并在cellForRowAtIndexPath中传递indexPath作为单元格属性

1

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

func tapButton(sender:UITapGestureRecognizer) { 
    let label = sender.view as! UILabel 
    self.variableToPass = label.text 
    performSegueWithIdentifier("SegueIdentifierName", sender: self) 
} 
相关问题