iPhone + UITableView + доступ к ячейке определенного ряда

StackOverflow https://stackoverflow.com/questions/1807666

  •  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 - лучшее место для настройки ячейки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top