dequeueReusableCellWithIdentifier UITableView два раза - PullRequest
1 голос
/ 29 марта 2012

У меня есть это, которое работает:

- (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

1 Ответ

1 голос
/ 29 марта 2012

Из того, что я вижу, вы всегда запрашиваете ячейку с идентификатором LONG в cellForRowAtIndexPath.Затем вы передаете это configureCell, где вы можете попытаться заменить эту ячейку ячейкой с идентификатором SHORT.Я думаю, это может быть слишком поздно, потому что вы уже удалили один с идентификатором LONG.Если честно, я никогда не пробовал что-то подобное, поэтому не могу точно сказать, является ли это причиной вашей проблемы.

Вы уже пробовали что-то подобное в 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];

}
...