我添加了UITableViewCell
默认类型的子视图。在此,假设我只有2行。首先,当谈到tableView:cellForRowAtIndexPath:
时,我将根据indexPath.row
为每个单元格生成动态标识符。所以它很顺利,并在if(cell == nil)
条件内创建一个新单元格。我只在这个条件下添加子视图。
接下来,除了那个条件之外,我只是通过从子单元contentView
中取出子视图来更新子视图的内容。这很有效。
问题在于:我正在扩展我的单元格(用户点击的单元格)。当我这样做时,它会进入tableView:cellForRowAtIndexPath:
并且我能够看到之前生成的相同标识符。但是,它进入if(cell == nil)
条件。
对于一个注释,我正在检查这种情况,
if(!cell)
而非if(cell == nil)
。
你能猜出是什么问题吗?然而,在我的深入调查中,我发现,只有在我扩展特定行而不是下一次扩展同一行时,它才会进入if(cell == nil)
内部。
以下是示例:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//number of count
return [array count];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
//dynamic height will be provided based on content.
return [self heightForRow:indexPath];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellIdentifier = [NSString stringWithFormat:@"cellIdentifier_%ld", (long)indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setupCell:cell forRow:[indexPath row] inTable:tableView];
}
[self updateCell:cell forRow:[indexPath row] inTable:tableView];
return cell;
}
- (void) setupCell:(UITableViewCell *)cell forRow:(NSInteger)row inTable:(UITableView *)tableView {
//setting up view here
}
- (void) updateCell:(UITableViewCell *)cell forRow:(NSInteger)row inTable:(UITableView *)tableView {
//updating view here
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
self.expandedIndexPath = ([indexPath compare:self.expandedIndexPath] == NSOrderedSame) ? nil : indexPath;
[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];
[tableView scrollToRowAtIndexPath:self.expandedIndexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}
希望我的问题对你很清楚。如果您没有收到任何内容或发现任何遗漏(请在此处更新),请发表评论,或者如果您知道解决方案是什么,请回答。
谢谢!