Я столкнулся с этой проблемой некоторое время назад, исправил ее в одном месте, забыл об этом, и мне пришлось заново открыть решение.
Мое решение состоит в том, чтобы не использовать tableView, переданный в качестве аргумента для tableView:cellForRowAtIndexPath:
, а вместо этого использовать tableView, принадлежащий классу tableViewController, в который входит.
в следующем примере, который совсем недавно изменился, так что условие conditionThatDoesntMatterForThisExample теперь возвращало немного другой результат, чем раньше, я обнаружил (или заново открыл, если хотите), что dequeueResuableCellWithIdentifier: возвращал хорошую ячейку в первый случай всегда, но только возвращение хорошей ячейки, когда tableView не был searchResultsTableView для второго вызова.
и ответ заключается в том факте, что tableView в моем tableViewController в моей раскадровке содержит прототип ячеек, которые я хочу использовать, а tableView, представленный searchResultsTableView, не имеет!
- (UITableViewCell *)tableView:(UITableView*)tableView
cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
BOOL isSearching = tableView == self.searchDisplayController.searchResultsTableView;
UITableViewCell* cell;
BOOL isAnchor = conditionThatDoesntMatterForThisExample;
if (isAnchor)
{
cell = [self.tableView dequeueReusableCellWithIdentifier:PlainCell];
}
else
{
cell = [tableView dequeueReusableCellWithIdentifier:ReplyCell];
}