Как получить indexPath.row для tableView, который в данный момент отображается? - PullRequest
9 голосов
/ 01 апреля 2011

У меня есть tableView со многими значениями.

Я хочу получить первое indexPath.row значение таблицы, которая отображается в данный момент.

Как я могу это сделать?

Я получаю сообщение об ошибке при реализации кришнабхадрыответ:

Строка, в которой появляется ошибка:

[self.table scrollToRowAtIndexPath:indexVis atScrollPosition:UITableViewScrollPositionTop animated:YES];

ОШИБКА:

Assertion failure in -[NSIndexPath row], /SourceCache/UIKit_Sim/UIKit-1447.6.4/UITableViewSupport.m:2018
2011-04-01 11:57:25.458 GlossaryPro[1525:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid index path for use with UITableView.  Index paths passed to table view must contain exactly two indices specifying the section and row.  Please use the category on NSIndexPath in UITableView.h if possible.'

Что можетбыть неправым?

Ответы [ 5 ]

23 голосов
/ 01 апреля 2011

Вы можете использовать функцию tableView indexPathsForVisibleRows, которая возвращает NSArray из NSIndexPath для всех видимых UITableViewCell. Из indexPath.row вы можете найти свой индекс массива.

NSArray *visible       = [tableView indexPathsForVisibleRows];
NSIndexPath *indexpath = (NSIndexPath*)[visible objectAtIndex:0];

indexPath.row даст вам индекс первого отображаемого объекта.

3 голосов
/ 03 апреля 2011

вы можете использовать indexPathsForVisibleRows

Возвращает массив путей индекса, каждый из которых идентифицирует видимую строку в приемнике.

- (NSArray *)indexPathsForVisibleRows

Возвращаемое значение

Массив объектов NSIndexPath, каждый из которых представляет индекс строки и индекс раздела, которые вместе идентифицируют видимую строку в табличном представлении.Возвращает ноль, если строки не видны.

3 голосов
/ 01 апреля 2011
[self.myTableView visibleCells];

NSArray *anArrayOfIndexPath = [NSArray arrayWithArray:[self.myTableView indexPathsForVisibleRows]];

NSIndexPath *indexPath= [anArrayOfIndexPath lastObject];

Надеюсь, это поможет вам.

0 голосов
/ 29 марта 2019

Получить точный номер индекса в центре, который отображается в данный момент:

 let middleIndex = ((tableView.indexPathsForVisibleRows?.first?.row)! + (tableView.indexPathsForVisibleRows?.last?.row)!)/2

Пример:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

  let middleIndex = ((tableView.indexPathsForVisibleRows?.first?.row)! + (tableView.indexPathsForVisibleRows?.last?.row)!)/2
  print(middleIndex)

}
0 голосов
/ 01 апреля 2011

Вы можете использовать: [self.tableView visibleCells]

Возвращает массив объектов UITableViewCell, каждый из которых представляет видимую ячейку в представлении принимающей таблицы.

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITableView_Class/Reference/Reference.html

...