我有这个工作:
- (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/