Проверьте, является ли определенный UITableViewCell видимым в UITableView - PullRequest
24 голосов
/ 08 ноября 2011

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

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

Спасибо:)

Ответы [ 4 ]

76 голосов
/ 16 апреля 2012

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

17 голосов
/ 08 ноября 2011
if ([tableView.visibleCells containsObject:myCell])
{
    // Do your thing
}

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

11 голосов
/ 08 ноября 2011

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

[tableView indexPathForCell:aCell];

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

1 голос
/ 01 июня 2017

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