Mam problem z przekazywaniem danych z niestandardowej komórki przez użytkownika dotykającego przycisku w tej komórce niestandardowej. Czasem otrzymuję nieprawidłowe dane komórek od czasu ponownego użycia komórki. Zastanawiałem się, czy istnieje pełny sposób sprawdzenia, czy zawsze uzyskać właściwe dane komórki do jej przycisku w każdej komórce, bez względu na to, która komórka jest aktualnie na ekranie. Poniżej znajduje się mój kod. Każda pomoc jest bardzo doceniana.Przesyłanie danych z przycisku w ponownie użytej komórce niestandardowej
niestandardowej komórek:
protocol CustomCellDelegate {
func segueWithCellData()
}
class CustomTableViewCell : UITableViewCell {
var delegate = CustomCellDelegate?
@IBAction func buttonTapped() {
if let delegate = self.delegate {
delegate.segueWithCellData()
}
}
}
MyTableViewController:
class MyTableViewController : UITableViewController, CustomCellDelegate {
var posts = [Post]()
var title: String!
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let post = posts[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCellReuseIdentifier", forIndexPath: indexPath)
title = post.title
cell.delegate = self
return cell
}
func segueWithCellData() {
self.performSegueWithIdentifier("passMyData", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == “passMyData” {
let destination = segue.destinationViewController as! UINavigationController
let targetVC = destination.topViewController as! nextVC
targetVC.title = title
}
}
}
Możesz spróbować dodać właściwość identyfikatora do CustomTableViewCell, w komórceForRowAtIndexPath przydzielić identyfikator, a następnie, gdy wywoływana jest metoda buttonTapped, przekazywać ją (identyfikator) do delegata.Użyj identyfikatora, aby uzyskać właściwe dane do wyświetlenia następnego widoku. – azimov
Jak zawsze: ** Nie nadużywaj widoku ** (komórka) ** jako modelu ** (źródło danych). Wzorzec kontrolera modelu zdecydowanie zniechęca cię do robienia tego. – vadian
@vadian - co jest nie tak w kodzie? Nie zrozumiałem twojego punktu widzenia. –