reloadRowsAtIndexPaths

reloadRowsAtIndexPaths

我有一些从XIB文件加载的UITableViewCells。除非单元格消失,否则在调用[UITableView reloadRowsAtIndexPaths:withRowAnimation:]方法之前,一切都很好。当我调用[UITableView reloadData]时,所有加载都将找到,当我在视图上上下滚动单元时,它也会重新出现。奇怪的。

我还注意到,当我调用[UITableView reloadRowsAtIndexPaths:withRowAnimation:]时,UITableView将不会尝试重用缓存的单元格,而是会尝试使用cell = [tableViewCells objectAtIndex:cellId]来获得一个新的单元格。

这是我的代码:

- (void)viewDidLoad
{
    ...
    // the objects from the XIB files are loaded onto an NSArray instance variable at viewDidLoad
    tableViewCells = [[NSBundle mainBundle] loadNibNamed:@"ProfileTableViewCell" owner:nil options:nil];
    ...
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int cellId = /* some logic to get the correct cellID */
    NSString *CellIdentifier = [NSString stringWithFormat:@"ProfileTableViewCell_%d", cellId];
    ProfileTableViewCell *cell = (ProfileTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [tableViewCells objectAtIndex:cellId];
        // additional work to setup subviews for the cell
        [cell prepareSubviews];
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    }
}

以防万一,这是我在[ProfileTableViewCell prepareSubviews]中所做的一些事情
- (void)prepareSubviews
{
    ...
    [self.containerView.layer setCornerRadius:3];
    [self.containerView.layer setBorderColor:UIColorFromRGB(0xCDCDCD).CGColor];
    [self.containerView.layer setBorderWidth:2.0];
    [self.containerView.layer setMasksToBounds:YES];
    [self.containerView.layer setShouldRasterize:NO];
    [self.containerView.layer setRasterizationScale:[UIScreen mainScreen].scale];
    ...
}

在此先感谢能帮助我的出色人士。

最佳答案

我不确定这是否是您的问题,但是获取细胞的方法不是正常方法。您应该在自己的笔尖(具有唯一的标识符)中制作每种类型的单元格,然后在registerNib:forCellReuseIdentifier:中注册笔尖。在cellForRowAtIndexPath中,只需根据索引路径将所需的单元出队,并且不要在if(cell == nil)子句中放入任何内容,因为用这种方式将不会调用该子句。

关于ios - 在UITableView reloadRowsAtIndexPaths上消失的UITableViewCell:,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18214008/

10-10 21:14