Подтвердить что ты не робот

Проверьте, отображается ли в UITableView определенный UITableViewCell

У меня есть UITableView и некоторые UITableViewCells, которые я создал вручную через Interface Builder. Я назначил каждую ячейку outlet, а im соединил их с UITableView в методе CellForRowAtIndexPath. В этом методе я использую метод switch(case) для отображения определенных ячеек в UITableView, в зависимости от случая.

Теперь я хочу найти конкретную ячейку и проверить, существует ли он в UITableView. Я использую метод: UITableView.visibleCells, чтобы получить массив ячеек в представлении таблицы. Мой вопрос: как я могу проверить, существуют ли определенные ячейки в массиве? могу ли я использовать розетку, которую я ей назначил? - (Лучшее решение), ИЛИ, могу ли я использовать идентификатор и как?

Спасибо:)

4b9b3361

Ответ 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]