Я в основном хочу показать UITableViewCellAccessoryDisclosureIndicator в зависимости от определенных ситуаций, в данном случае, когда URL существует в моих данных строки ( на который я ссылаюсь через indexPath.row.
У меня есть правильный код, чтобы понять это (т. Е. Если URL существует), но я не уверен, где мне следует указывать этот код в методе cellForRowAtIndexPath:. Я пробовал это в предложении if (cell == nil) и вне его, и оба раза ячейка перерисовывается иногда с индикатором или без него, когда ячейка возвращается в поле зрения после прокрутки.
Начальная ничья.
Какие-нибудь советы, как мне лучше всего этого добиться?
Да, вы должны поместить его в метод делегата cellForRowAtIndexPath: вне оператора "if (cell == nil)". Поскольку ячейки перерабатываются, вы должны убедиться, что для типа аксессуара установлено правильное значение для каждой ячейки, а не только для тех, которым требуется определенный тип аксессуара.
Например:
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)ip {
UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:@"CELL"];
if (cell == nil) {
cell = [[[UITableView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL"] autorelease];
}
if (ip.row == 3) {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
return cell;
}
Этот код не будет работать так, как мы хотим. Поскольку ячейки перерабатываются, ячейка с типом аксессуара, для которого задано значение UITableViewCellAccessoryDisclosureIndicator, будет повторно использоваться позже в неопределенной строке и будет отображать индикатор раскрытия, даже если она не находится в строке № 3.
Чтобы иметь дело с повторным использованием ячеек, мы должны установить вспомогательный тип для КАЖДОЙ ячейки, какой бы ни была их строка:
if (ip.row == 3) {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
else {
cell.accessoryType = UiTableViewCellAccessoryNone;
}
Я точно не знаю, объясняет ли это вашу проблему, но это определенно связано с повторным использованием ячейки.
РЕДАКТИРОВАТЬ:
Хорошо, вы сами нашли решение, пока я печатал свой ответ. :о)
В конце концов, ответ был прост. Когда присутствовал URL-адрес, я устанавливал UITableViewCellAccessoryDisclosureIndicator. Чего я не делал, так это устанавливал UITableViewCellAccessoryNone, если не было URL-адреса. Поэтому при перерисовке он запоминал строку с включенным параметром.