我正在编写一个包含2个部分的UITableView。当表首次加载时,所有单元格都显示正确的信息,但是当我开始向上和向下滚动时,单元格detailTextLabel和accessoryType正在被错误地刷新,这样一些应该只包含detailTextLabel的单元格也包含一个附件,并且应该只包含一个附件也包含一个详细的TextLabel。
Inside cellForRowAtIndexPath:
我使用嵌套的switch / case语句将正确的值应用于各自的section / row中的单元格。至于我可以说这些陈述中的逻辑是正确的,那么更新时cell
变量的值是否可能是有效的?
表格正确加载但滚动后的accessoryType和detailedTextLabel混淆了。
Click for link to screen shots of the table.
以下是我的UITableViewController子类中的代码:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [sectionNames count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
NSArray *headingsSection = [cellTitles objectAtIndex:section];
return [headingsSection count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [sectionNames objectAtIndex:section];
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
self.tableView.allowsSelection = YES;
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [[cellTitles objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
cell.textLabel.textColor = [UIColor blackColor];
cell.textLabel.font = [UIFont boldSystemFontOfSize:15];
switch (indexPath.section) {
case 0:
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d%%", [[assistSettingsArray_glob objectAtIndex:indexPath.row] intValue]];
break;
case 1:
switch (indexPath.row) {
case 0:
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 1:
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 2:
if (defaultAssistOn) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
break;
}
break;
}
return cell;
}
答案 0 :(得分:8)
由于细胞重复使用,具有先前设定值的细胞会重新出现。
在switch (indexPath.section) ...
之前,将detailTextLabel和accessoryType初始化为默认值:
cell.detailTextLabel.text = @"";
cell.accessoryType = UITableViewCellAccessoryNone;
答案 1 :(得分:0)
尝试将代码包含在parantheisis中的每个开关案例中。所以上面的代码如下所示:
switch (indexPath.section) {
case 0: {
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d%%",
[[assistSettingsArray_glob objectAtIndex:indexPath.row] intValue]];
break;
}
case 1: {
switch (indexPath.row) {
case 0: {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break; }
case 1: {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break; }
case 2: {
if (defaultAssistOn) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else{
cell.accessoryType = UITableViewCellAccessoryNone;
}
break; }
default:
break;
}
break;
}
default:
break;
}
我不确定这是否有效。如果确实如此,请告知:)