iPhone + UITableView + доступ к ячейке определенного ряда
-
05-07-2019 - |
Вопрос
Я использую следующий метод в своем приложении:
- (UITableViewCell *)tableView:(UITableView *)tblView cellForRowAtIndexPath:(NSIndexPath *)indexPath
В этом методе с помощью indexPath.row
я могу получить номер строки для каждой строки.
Но я хочу получить доступ к ячейке в этой строке и выполнить некоторое форматирование только в этой ячейке.
Пожалуйста, ведите меня.
Решение
Может быть, есть недоразумение. Предполагается, что метод, который вы цитируете, сообщает tableView, какую строку отображать в этом indexPath. Поэтому всякий раз, когда tableView запрашивает этот метод, он делает это, поскольку в этом indexPath еще нет строки.
Код шаблона сгенерирует новую ячейку или снимет ее с очереди:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
Затем вы можете получить доступ к ячейке
, чтобы настроить содержимое каждой ячейки или добавить содержимое в contentView.
Если вы управляете форматированием ячейки для каждой строки (например, цветом cell.textLabel), вы должны сделать это следующим методом делегата:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
Другие советы
Хотя остальные ответы будут работать нормально, но они просто изменят ячейку, на которую нажал пользователь. Для моего случая я хотел изменить и другие ячейки. Обыскав вокруг, я попытался:
[[tableView cellForRowAtIndexPath:5 setAccessoryType:UITableViewCellAccessoryNone];
Это НЕ работает, потому что IndexPath не является целым числом. (indexpath.row есть, однако). Итак, просмотрев документацию, я обнаружил, что мы можем использовать NSIndexPath для кодирования строки в Значение NSIndexPath. Вот рабочий код:
[[tableView cellForRowAtIndexPath: [NSIndexPath indexPathForRow:5 inSection:0]] setAccessoryType:UITableViewCellAccessoryNone];
Таким образом, вы можете получить доступ к ячейке ВСЕГДА, В ЛЮБОЙ СТРОКЕ / РАЗДЕЛЕ, если у вас есть объект tableview.
Надеюсь, это кому-нибудь поможет.
Вы можете получить доступ к видимой ячейке, используя метод UITableView -cellForRowAtIndexPath
. Из UITableView ссылки: р>
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
Возвращаемое значение
Объект, представляющий ячейка таблицы или ноль, если ячейка не виден или indexPath находится вне Диапазон. р>
Однако (IMO) cellForRowAtIndexPath
- лучшее место для настройки ячейки.