53 votes

Obtenir l'emplacement exact d'une UITableViewCell

Étant donné un UITableView comment puis-je trouver l'emplacement d'un site spécifique UITableViewCell ? En d'autres termes, je veux obtenir son cadre par rapport à l'écran de mon iPhone, et non par rapport à l'écran de l'appareil. UITableView . Donc si mon UITableView est déroulé, l'emplacement de chaque UITableViewCell devrait être plus haut sur l'écran, etc.

101voto

Jhaliya Points 24039

Vous pouvez également utiliser le rectForRowAtIndexPath pour obtenir l'emplacement d'un UITableView en envoyant le indexPath pour ça.

- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath

Utilisez donc comme ci-dessous :

CGRect myRect = [tableView rectForRowAtIndexPath:indexPath];

64voto

Tomasz Points 1817

En dehors de rectForRowAtIndexPath, il faut tenir compte du défilement.

Essayez ce code :

 // Get the cell rect and adjust it to consider scroll offset
 CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
 cellRect = CGRectOffset(cellRect, -tableView.contentOffset.x, -tableView.contentOffset.y);

23voto

Vladimir Points 110327

Essayez ce qui suit (envoyer nil comme paramètre toView signifie que vous voulez convertir votre rectangle en coordonnées de fenêtre) :

CGRect r = [cell convertRect:cell.frame toView:nil];

Et n'oubliez pas que si une ligne particulière n'est pas visible actuellement, il se peut qu'il n'y ait pas de UITableViewCell pour elle - donc avant d'utiliser ce code, vous devez vérifier si la cellule est valide (et non nulle par exemple).

17voto

William Hu Points 16

Swift 3

Par rapport à la tableView :

let rect = self.tableView.rectForRow(at: indexPath)

Par rapport à la Screen :

Si vous ne connaissez que le cell ,

if let indexPath = tableView.indexPath(for: cell) {
     let rect = self.tableView.rectForRow(at: indexPath)
     let rectInScreen = self.tableView.convert(rect, to: tableView.superview)
}

Si vous connaissez le indexPath alors il n'est pas nécessaire d'appeler la if déclaration.

9voto

Milan Vadgama Points 221

Essayez-le sur

didSelectRowAtIndexPath méthode

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

        // get current location of selected cell

        CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath];

        CGRect rectInSuperview = [tableView convertRect:rectInTableView toView:[tableView superview]];

         NSLog(@"Cell Y Is %f",rectInSuperview.origin.y);

        NSLog(@"Cell X Is %f",rectInSuperview.origin.x);

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