Implémenter un button similaire dans une tableviewCell dans swift

J'essaye de faire un button semblable dans chacune de mes cellules de tableview. Quand il est pressé, le button changera pour "unlike". J'ai été capable de le faire en créant un IBOutlet dans ma sous-class et une méthode IBAction dans ma class tableviewcontroller en utilisant sender.setTitle ("unlike", forState: UIControlState.Normal). Mais quand je clique dessus, la méthode transforme un tas d'autres buttons de tableview en "unlike", dupliquant essentiellement le comportement d'une cellule. La façon dont cela se fait est que cela change toutes les autres cellules, donc si je clique sur le button "j'aime" de 2 cellules consécutives, toutes les cellules de la vue table deviendront "dissemblables". Voici mon code pour le tableViewController:

class TableViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 30 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as TableViewCell cell.tag = indexPath.row cell.like.tag = indexPath.row cell.like.addTarget(self, action: "handleLikes:", forControlEvents: .TouchUpInside) return cell } @IBAction func handleLikes(sender: AnyObject){ println(sender.tag) // This works, every cell returns a different number and in order. sender.setTitle("Pressed", forState: UIControlState.Normal) } 

Et voici mon code pour la class TableViewCell:

 class TableViewCell: UITableViewCell { @IBOutlet weak var like: UIButton! override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } } 

En outre, ce n'est pas lié, mais si quelqu'un lisait ceci pourrait me dire comment je pourrais améliorer mon style et / ou la clarté du code, j'apprécierais aussi cela.

UITableViewCell s sont réutilisables. Cela signifie que vous devez définir le titre sur "unlike" ou "like" pour chaque cellule. Le plus simple, puisque je suppose que vous ViewController données de toute façon, serait de créer un tableau de strings dans votre ViewController

Ajoutez ceci à votre ViewController : var likes: [Ssortingng]!

dans ViewDidLoad: likes = [Ssortingng](count: 20, repeatedValue: "like") Notez que la longueur doit être basée sur le nombre de UITableViewCells que vous allez afficher.

Votre cellForRowAtIndexPath :

 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as TableViewCell cell.like.tag = indexPath.row cell.like.addTarget(self, action: "handleLikes:", forControlEvents: .TouchUpInside) cell.like.setTitle(likes[indexPath.row], forState: UIControlState.Normal) return cell } 

Fonction handleLikes :

 func handleLikes(sender: AnyObject){ println(sender.tag) // This works, every cell returns a different number and in order. if likes[sender.tag] == "like" { likes[sender.tag] = "unlike" } else { likes[sender.tag] = "like" } sender.setTitle(likes[sender.tag], forState: UIControlState.Normal) }