嘿伙计们我已经连续两天坚持这个问题,所以我问是否有人可以帮助我。
我的桌面视图由4个部分组成。
第1节 - >由1行组成,其中单元格包含子视图,这是一个uiimageview
第2节 - >由2个普通行组成(只有2个简单的单元格,其中包含文字)
第3节 - >由1个正常行组成
第4节 - >由1行组成,其中单元格包含子视图,该子视图是可以包含动态文本的uitextview,因此uitextview的高度以及因此单元格高度会根据uitextview中的文本数量而变化。
以下是创建此结构的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//create a nsstring object that we can use as the reuse identifier
static NSString *CellIdentifier = @"Cell";
//check to see if we can reuse a cell from a row that has just rolled off the screen
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//if there re no cells that can be reused, create a new cell
if(cell==nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
switch (indexPath.section) {
case 0:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
[cell.contentView addSubview:_viewForImageHeader];
break;
case 1:
cell.selectionStyle = UITableViewCellSelectionStyleGray;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.numberOfLines = 0;
cell.textLabel.lineBreakMode = 0;
cell.textLabel.font = [UIFont fontWithName:@"AmericanTypewriter" size:16.0];
break;
case 2:
cell.selectionStyle = UITableViewCellSelectionStyleGray;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.font = [UIFont fontWithName:@"AmericanTypewriter" size:16.0];
break;
default:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
[cell.contentView addSubview:_textViewForArticle];
break;
}
}
else{
NSLog(@"in else");
}
//here i fill in the 2 normal cells with text
return cell;
}
当uitableview加载时(在纵向模式下)一切都很完美(图像在第1部分,第2和第3部分包含正确的文本,第4部分包含我的动态文本)。但是当我开始旋转应用程序时,所有单元格都会混淆。例如,我在第4节中找到section3的内容,反之亦然。
我认为这与我不能正确重用细胞的事实有关。我应该使用标签,如果是这样,我如何在特定情况下实现标签的使用?
答案 0 :(得分:0)
将switch
个案置于if
条件之后 - if and else
答案 1 :(得分:0)
是的,这是因为重用细胞。这里有几个选项,但是如果你在这个tableView中永远不会有超过5个单元格,那么到目前为止最简单和最优化的解决方案是不重用单元格。换句话说,不是每次都调用" dequeueReusableCellWithIdentifier"而是只分配一个新的单元格。
当你有更多的单元格时,这会降低性能,但是如果你的单元格是静态的并且有限(就像它们看起来那样),那么尝试重用单元格并没有真正的好处。
如果你有4个"类型"对于单元格和更多行(更多动态分配的单元格),解决方案是为4"类型"中的每一个子类化UITableViewCell。然后根据部分或任何条件调用正确的单元格。