【问题标题】:issue when trying to create my own cell尝试创建自己的单元格时出现问题
【发布时间】:2012-01-01 23:27:03
【问题描述】:

我正在定制我的单元格,如下所示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 static NSString *CellIdentifier = @"reusedCell";    
 DetailCell *cell = (DetailCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Customize the cell of each row from table
 if ( cell == nil ) {
     NSLog(@" MY CELL IS NIL");
     cell = [[DetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
else
     NSLog(@" MY CELL IS NOT NIL");
}

通过调试,我知道根本没有到达第 4-5 行

MY CELL IS NOT NIL

因此,我无法创建自己的单元格。根据苹果文档

通常,数据源应该做的第一件事是将 dequeueReusableCellWithIdentifier: 发送到表视图,并传入重用标识符字符串。如果表格视图没有返回可重用的单元格对象,则数据源会创建一个,在 initWithStyle:reuseIdentifier 的最后一个参数中为该对象分配一个重用标识符:

因此,在我的情况下,表格视图确实返回了一个可重用的单元格对象......它从何而来...... 以前有没有人遇到过这个问题。请帮忙谢谢。

【问题讨论】:

    标签: iphone ios cocoa-touch


    【解决方案1】:

    第一次显示列表时,单元格将始终为零。然后当单元格从末端滚动时,它们会通过可重用列表进行回收。所以有时当你调试时,单元格是零,有时你会得到一个回收的单元格。此外,如果您在多个列表(您不应该这样做)上使用相同的标识符(即@"reusedCell"),则另一个列表中的一个单元格可能会被回收到您的列表中。这就是为什么您应该保持单元格标识符唯一的原因。

    【讨论】:

    • 我同意在第一次显示列表时,单元格为零。我有一个名为reusedCell 的唯一标识符和1 个可以玩的列表...仍然不知道为什么我的单元格不为零...
    • 第一次显示列表,单元格为零。到目前为止同意。该列表涂有您分配为 DetailCells 的单元格。下一次,你去绘画列表,它会看到以前使用过的 DetailCells,并自己给你一个。就像对待一个新细胞一样对待它,它只是一个回收的细胞。当您调用 cellForRowAtIndexPath 并且您已经分配了一些单元格时,您无法判断是否还会有一个使用过的单元格仍在内存中,它会首先给您。另请注意,由于必须在第 4-5 行中创建该单元格,因此您知道它是您的单元格之一。
    【解决方案2】:

    如果您想在用户每次滚动表格时创建新单元格,则需要在自定义单元格类中覆盖 UITableViewCell 的重用标识符属性。

    - (NSString *) reuseIdentifier
    {
        return @"";
    }
    

    这将让您创建新的单元格。但是,请检查内存使用情况。因为每次用户滚动表格时您都会创建新单元格。

    【讨论】:

    • 这不是一个好主意。苹果已经指定了正确的方法,如果有人在没有意识到内存考虑的情况下使用上述方法,就会给他们带来问题。最好坚持苹果的方法。
    猜你喜欢
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2013-06-12
    相关资源
    最近更新 更多