J'ai un UITableViewCell
avec UISwitch
comme vue accessoire de chaque cellule. Lorsque je modifie la valeur du commutateur dans une cellule, comment puis-je savoir dans quelle rangée se trouve le commutateur ? J'ai besoin que le numéro de ligne dans l'événement de changement de valeur soit modifié.
Réponses
Trop de publicités?Les balises, les sous-classes ou la navigation de hiérarchie de vue sont trop de travail !. Faites-le dans votre méthode d'action :
CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint];
Fonctionne avec tout type de vue, tables multi-sections, tout ce que vous pouvez lui lancer - tant que l'origine de votre expéditeur est dans le cadre de la cellule (merci rob !), ce qui sera généralement le cas.
Et le voici dans une extension UITableView Swift :
extension UITableView {
func indexPath(for view: UIView) -> IndexPath? {
let location = view.convert(CGPoint.zero, to: self)
return self.indexPathForRow(at: location)
}
}
Je préfère utiliser des sous-écrans, si vous connaissez votre mise en page, c'est généralement super simple et 1 ligne courte...
NSIndexPath *indexPath = [tableView indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
C'est lui, s'il est plus imbriqué, ajoutez plus de vues supervisées.
Un peu plus d'infos :
tout ce que vous faites est de demander la vue parent et sa vue parent qui est la cellule. Ensuite, vous demandez à votre tableview le chemin d'index de cette cellule que vous venez de recevoir.