Изображение iOS AccessoryDetail не обновляется при перезагрузке UITableView - PullRequest
0 голосов
/ 16 июня 2011

Я загружаю UITableView, иногда он будет иметь 5 ячеек, а иногда 4 ячейки. В зависимости от того, сколько ячеек у него будет, я хочу установить кнопку AccessoryDetail либо для строки 2, либо для строки 3. Я знаю, что условие работает, потому что я попытался успешно с didSelectRowAtIndexPath:, но по какой-то причине TableView не кажется чтобы получить обновление в зависимости от того, сколько строк отображается. Я успешно перезагружаю данные TableView в viewWillAppear: с [tableView reloadData], но это не решает проблему AccessoryDetail для меня. Я пытался использовать [tableView reloadInputViews] безрезультатно. Проблема заключается в том, что для изображения AccessoryDetail всегда задана строка 2 или строка 3, в зависимости от того, какое представление я начинаю загружать из приложения.

Вот логика из метода cellForRowAtIndexPath::

if ((row == 2) && ([[self.office boxAddress] length] == 0) || (row == 3) && ([[self.office boxAddress] length] != 0)) {
            cell.selectionStyle = UITableViewCellSelectionStyleGray;
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
        }

EDIT: Я изменил свой метод в соответствии с предложением Саймона Ли с предложением else, чтобы он выглядел следующим образом, но, похоже, он тоже не работает:

if (cell == nil) {

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:OfficeCellIdentifier] autorelease];


 if ((row == 2) && ([[self.office boxAddress] length] == 0) || (row == 3) && ([[self.office boxAddress] length] != 0)) {
     cell.selectionStyle = UITableViewCellSelectionStyleGray;
     cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
 //NSLog(@"row == 2 && [[self.office boxAddress] length] == 0 || row == 3");
 } else {
     cell.selectionStyle = UITableViewCellSelectionStyleNone;
     cell.accessoryType = UITableViewCellAccessoryNone;
 }

}

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Поместите оператор if-else вне блока кода if (cell == nil). Если вы повторно используете ячейку, ни один из ваших кодов не будет вызван.

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:OfficeCellIdentifier] autorelease];
}

 if ((row == 2) && ([[self.office boxAddress] length] == 0) || (row == 3) && ([[self.office boxAddress] length] != 0)) {
     cell.selectionStyle = UITableViewCellSelectionStyleGray;
     cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
 } else {
     cell.selectionStyle = UITableViewCellSelectionStyleNone;
     cell.accessoryType = UITableViewCellAccessoryNone;
 }
1 голос
/ 16 июня 2011

Вы должны сбросить стиль выделения и тип аксессуара, у вас там нет предложения else ... как только вы его установите, вот и все, если вы повторно используете ячейки, они никогда не получат сброс своего аксессуара ....

...