为什么UITableView不会出现可重复使用的单元格?

时间:2015-07-29 12:11:05

标签: ios objective-c uitableview

我添加了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];
}

希望我的问题对你很清楚。如果您没有收到任何内容或发现任何遗漏(请在此处更新),请发表评论,或者如果您知道解决方案是什么,请回答。

谢谢!

0 个答案:

没有答案