我正在使用UITableView编写一个首选项面板,如下所示:
第一部分包含简单行,第二部分包含UISwitch作为子视图的行。
当我更改为横向并开始滚动时,tableview的行为方式很奇怪:
这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell
if (indexPath.section == 0) {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
if (indexPath.row == 0) {
cell.textLabel.text = @"Help";
}else if (indexPath.row == 1){
cell.textLabel.text = @"About us";
}
else if(indexPath.row == 2){
cell.textLabel.text = @"Send to a friend";
}
}else if(indexPath.section == 1){
cell.accessoryType = UITableViewCellAccessoryNone;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (indexPath.row == 0) {
cell.textLabel.adjustsFontSizeToFitWidth = NO;
cell.textLabel.text = @"Show favs at launch";
[cell addSubview:favoritesSwitch];
}else if (indexPath.row == 1){
cell.textLabel.text = @"Open with Safari";
[cell addSubview:browserSwitch];
}
else if(indexPath.row == 2){
cell.textLabel.text = @"Remember query";
[cell addSubview:lastQuerySwitch];
}
else if(indexPath.row == 3){
cell.textLabel.text = @"Automatic keyboard";
[cell addSubview:keyboardSwitch];
}
}
return cell;
}
提前谢谢你:)
答案 0 :(得分:4)
您应该执行以下操作:
继续对所有单元使用相同的CellIdentifier (性能!如果为每个单元创建一个新的标识符,它将起作用,但会占用大量内存)。使用多个Cell Identifier只适用于您的单元格根本不同的情况,例如不同的自定义UITableViewCell-Subclasses。
不要将您的交换机添加为子视图(!!!),而是使用cell.accessoryView = mySwitch
。如果此单元格没有开关,请务必设置cell.accessoryView = nil
以清理单元格以便重复使用。使用accessoryView for Switches将自动处理所有布局工作。
当您将accessoryView设置为nil时,您可以在重复使用单元格时继续为您的DetailDisclosure-Buttons使用accessoryType!
答案 1 :(得分:1)
可能会发生这种情况,因为您使用相同的单元格标识符来访问表格单元格。
尝试
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell %d_%d",indexPath.section,indexPath.row];
而不是。
static NSString *CellIdentifier = @"Cell";
答案 2 :(得分:0)
tableView正在回收您添加了browserSwitch,lastQuerySwitch和keyboardSwitch的单元格。从单元格视图中删除这些内容毫无意义。在//配置单元格注释之后添加以下行。我认为这样可以解决它。
[browserSwitch removeFromSuperview];
[lastQuerySwitch removeFromSuperview];
[keyboardSwitch removeFromSuperview];