39 votes

Comment connaître le numéro de ligne UITableview

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é.

159voto

jrturton Points 64875

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)
    }
}

3voto

wattson12 Points 8765

dans cellForRowAtIndexPath:, définissez la propriété tag de votre contrôle sur indexPath.row

2voto

Andres Canella Points 674

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X