Использование альтернативного accessoryType в UITableViewCell

Я в основном хочу показать UITableViewCellAccessoryDisclosureIndicator в зависимости от определенных ситуаций, в данном случае, когда URL существует в моих данных строки ( на который я ссылаюсь через indexPath.row.

У меня есть правильный код, чтобы понять это (т. Е. Если URL существует), но я не уверен, где мне следует указывать этот код в методе cellForRowAtIndexPath:. Я пробовал это в предложении if (cell == nil) и вне его, и оба раза ячейка перерисовывается иногда с индикатором или без него, когда ячейка возвращается в поле зрения после прокрутки.

Начальная ничья.

Какие-нибудь советы, как мне лучше всего этого добиться?

1
задан mootymoots 29 August 2010 в 08:40
поделиться

2 ответа

Да, вы должны поместить его в метод делегата 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;
    }

Я точно не знаю, объясняет ли это вашу проблему, но это определенно связано с повторным использованием ячейки.

РЕДАКТИРОВАТЬ:

Хорошо, вы сами нашли решение, пока я печатал свой ответ. :о)

2
ответ дан 2 September 2019 в 21:44
поделиться

В конце концов, ответ был прост. Когда присутствовал URL-адрес, я устанавливал UITableViewCellAccessoryDisclosureIndicator. Чего я не делал, так это устанавливал UITableViewCellAccessoryNone, если не было URL-адреса. Поэтому при перерисовке он запоминал строку с включенным параметром.

0
ответ дан 2 September 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: