我有这个工作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Item *objItem = [[self fetchedResultsController] objectAtIndexPath:indexPath];
CustomCell *cell = nil;
cell = [self.tableView dequeueReusableCellWithIdentifier:identifierLONG];
[self configureCell:cell atIndexPath:indexPath tableView:tableView];

}


我想做这样的事情:

- (void)configureCell:(TimelineTextoFotoCell *)cell atIndexPath:(NSIndexPath *)indexPath tableView:(UITableView *)tableView{

Item *objItem = [[self fetchedResultsController] objectAtIndexPath:indexPath];
 cell.txtNota.text = objItem.nota;

 if ([cell.txtNota.text sizeWithFont:cell.txtNota.font constrainedToSize:CGSizeMake(cell.txtNota.frame.size.width, 1000.f)].height/cell.txtNota.font.pointSize < 2.0) {
        cell = [tableView dequeueReusableCellWithIdentifier:identifierSHORT];
    } else {
    //should remain dequeueReusableCellWithIdentifier:identifierLONG....
    }

//setup cell the same, for both cases.
}


它不起作用。单元格始终使用dequeueReusableCellWithIdentifier:identifierLONG,我检查了cell = [tableView dequeueReusableCellWithIdentifier:identifierSHORT];行是否已执行。我需要根据获取的objectAtIndexPath:indexPath更改标识符

最佳答案

据我所知,您总是在cellForRowAtIndexPath中请求一个带有identifierLONG的单元格。然后,将其传递给configureCell,在此处您可以选择尝试使用具有identifierSHORT的单元格替换该单元格。我想这可能为时已晚,因为您已经用identifierLONG出队了。老实说,我从未尝试过类似的方法,所以我无法确定这是否是导致您出现问题的原因。

您是否已经在cellForRowAtIndexPath中尝试过类似的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    Item *objItem = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    CustomCell *cell = nil;

    if (<<ToBeReplacedWithSomeConditionWhichOnlyUsesobjItem>>) {
        cell = [tableView dequeueReusableCellWithIdentifier:identifierSHORT];
    } else {
        cell = [tableView dequeueReusableCellWithIdentifier:identifierLONG];
    }
    [self configureCell:cell atIndexPath:indexPath tableView:tableView];

}

关于ios - 两次dequeueReusableCellWithIdentifier UITableView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9919442/

10-09 12:53