2016-08-12 93 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) 
} 
相關問題