it-swarm.com.ru

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

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

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

Спасибо :)

24
ozking

Обратите внимание, что вы также можете использовать 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, используемый в качестве моего бэкэнда в этом случае.

75
StuFF mc
if ([tableView.visibleCells containsObject:myCell])
{
    // Do your thing
}

Это предполагает, что у вас есть отдельная переменная экземпляра, содержащая интересующую вас ячейку, я думаю, что вы делаете из вопроса, но это не ясно. 

17
jrturton

Вы можете использовать метод UITableView:

[tableView indexPathForCell:aCell];

Если ячейка не существует в tableView, она вернет ноль. В противном случае вы получите NSIndexPath ячейки.

11
Sorig

Вы можете сделать это в 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
}
1
pableiros