web-dev-qa-db-fra.com

Obtenir la position de la cellule dans UITableview

J'essaye d'obtenir la position de la cellule dans la vue de table. à partir de ce code, je reçois la position de la cellule

int numberOfSections = [UITableView numberOfSections];
int numberOfRows = 0;
NSIndexPath *tempIndexPath = nil;
UITableViewCell *tempCell = nil;
for(int i=0;i<numberOfSections;i++)
{
     numberOfRows = [UITableView numberOfRowsInSection:i];
     for(int j=0;j<numberOfRows;j++
     {
           tempIndexPath = [NSIndexPath indexPathForRow:j inSection:i];
           tempCell = [UITableView cellForRowAtIndexPath:tempIndexPath];
           NSLog("Y postion for cell at (Row = %d,Section = %d) is :%f",tempCell.frame.Origin.y);
     }  
}

il calcule les axes y de la cellule dans tableview mais mon problème est que je veux obtenir la position de la cellule dans la zone visible de tableview rect. c'est-à-dire si la vue de table a une taille cgrectmake (0,0,200,500) et une hauteur de cellule de 100 pixels. donc tableview affichera 5 lignes. si je défile vers le bas et sélectionne la 7e ligne. j'obtiendra ses axes y 700. mais la cellule sera dans (0,0,200,500) cadre. Comment puis-je obtenir l'emplacement des cellules dans ce cadre (0,0,200,500).

36
TalaT

NOTE : J'espère que la question pourrait avoir été mise à jour à nouveau, veuillez utiliser les autres réponses qui peuvent vous concerner.

Vous pouvez utiliser la méthode visibleCells qui retournera les cellules actuellement visibles dans votre tableview:

NSArray *visibleCellsList=[tableview visibleCells];

for (UITableViewCell* currentCell in visibleCellsList) {

    NSLog(@"cell : %@ \n\n",currentCell.textLabel.text);

}

Pour obtenir la position d'un UITableViewCell par rapport à la vue dans laquelle il se trouve (par exemple par rapport à votre zone visible):


Swift 3, Swift 4:

let rectOfCellInTableView = tableView.rectForRow(at: indexPath)
let rectOfCellInSuperview = tableView.convert(rectOfCellInTableView, to: tableView.superview)

print("Y of Cell is: \(rectOfCellInSuperview.Origin.y)")


Objectif-C:

CGRect rectOfCellInTableView = [tableView rectForRowAtIndexPath: indexPath];
CGRect rectOfCellInSuperview = [tableView convertRect: rectOfCellInTableView toView: tableView.superview];

NSLog(@"Y of Cell is: %f", rectOfCellInSuperview.Origin.y);


Swift 2:

let rectOfCellInTableView = tableView.rectForRowAtIndexPath(indexPath)
let rectOfCellInSuperview = tableView.convertRect(rectOfCellInTableView, toView: tableView.superview)

print("Y of Cell is: \(rectOfCellInSuperview.Origin.y)")
197
Nikolay Suvandzhiev

Je l'ai fait comme ça:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

C'était tout ce que j'avais à faire, que je pouvais tous cell.frame, cell.bounds, etc.

0
Andrew