Я загружаю 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;
}
}