Проверьте, отображается ли в UITableView определенный UITableViewCell
У меня есть UITableView
и некоторые UITableViewCells
, которые я создал вручную через Interface Builder. Я назначил каждую ячейку outlet
, а im соединил их с UITableView
в методе CellForRowAtIndexPath
. В этом методе я использую метод switch(case)
для отображения определенных ячеек в UITableView
, в зависимости от случая.
Теперь я хочу найти конкретную ячейку и проверить, существует ли он в UITableView
. Я использую метод: UITableView.visibleCells
, чтобы получить массив ячеек в представлении таблицы. Мой вопрос: как я могу проверить, существуют ли определенные ячейки в массиве? могу ли я использовать розетку, которую я ей назначил? - (Лучшее решение), ИЛИ, могу ли я использовать идентификатор и как?
Спасибо:)
Ответы
Ответ 1
Обратите внимание, что вы также можете использовать indexPathsForVisibleRows
следующим образом:
NSUInteger index = [_people indexOfObject:person];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
if ([self.tableView.indexPathsForVisibleRows containsObject:indexPath]) {
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
Если у вас есть indexPath (и не нужна фактическая ячейка), это может быть дешевле.
PS: _people
- это NSArray
, используемый в этом случае как мой бэкэнд.
Ответ 2
if ([tableView.visibleCells containsObject:myCell])
{
// Do your thing
}
Это предполагает, что у вас есть отдельная переменная экземпляра, содержащая интересующую вас ячейку, я думаю, что вы делаете это из вопроса, но это не ясно.
Ответ 3
Вы можете использовать метод UITableView:
[tableView indexPathForCell:aCell];
Если ячейка не существует в tableView, она вернет нуль. В противном случае вы получите ячейку NSIndexPath.
Ответ 4
Вы можете сделать это в Swift 3, чтобы проверить, отображается ли UITableViewCell
:
let indexPathToVerify = IndexPath(row: 0, section: 0)
let cell = tableView.cellForRow(at: indexPathToVerify)
if tableView.visibleCells.contains(cell) {
// the cell is visible
}
Ответ 5
Начиная с iOS 7, indexPathForVisibleRows
будет содержать строку, которая находится под полупрозрачной панелью навигации, поэтому теперь вам нужно сделать это:
[self.tableView indexPathsForRowsInRect:self.tableView.safeAreaLayoutGuide.layoutFrame]