重新加载UITableView时,iOS AccessoryDe​​tail图像不会更新

时间:2011-06-16 12:43:27

标签: objective-c ios cocoa-touch uitableview reloaddata

我正在加载一个UITableView,有时会有5个单元格,有时还有4个单元格。根据它将拥有多少个单元格,我想为第2行或第3行设置AccessoryDe​​tail按钮。我知道条件有效,因为我已成功使用didSelectRowAtIndexPath:但由于某种原因,TableView没有似乎根据显示的行数进行更新。我正在使用viewWillAppear:[tableView reloadData]中成功重新加载TableView数据,但这并没有解决我的AccessoryDe​​tail问题。我尝试使用[tableView reloadInputViews]无济于事。问题是AccessoryDe​​tail映像始终设置为第2行或第3行,具体取决于我从应用程序开始加载的视图。

以下是cellForRowAtIndexPath:方法的逻辑:

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

编辑: 我根据Simon Lee的建议改变了我的方法,其中一个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 个答案:

答案 0 :(得分:1)

你应该重置选择样式和配件类型,你没有其他条款......一旦你设置它,就是这样,如果你重复使用它们将永远不会让它们的配件重置....

答案 1 :(得分:1)

将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;
 }