UITableViewController редактировать по идентификатору ячейки - PullRequest
1 голос
/ 10 апреля 2011

ChatViewController из acaniChat имеет два разных типа ячеек с идентификаторами ячеек: @"MessageCellID" и @"TimestampCellID". Как сделать так, чтобы редактировались только ячейки сообщения?

Вот что я сделал. Это вроде работает, но редактируются только ячейки сообщений на экране.

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return [[chatContent cellForRowAtIndexPath:indexPath] reuseIdentifier] == MessageCellId;
}

Это работает для всех клеток, но правильная ли это практика?

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return [[cellMap objectAtIndex:[indexPath row]] isKindOfClass:[Message class]];
}

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Мой «ответ» - это скорее рекомендация, чтобы вы использовали проверку источника данных вместо проверки ячейки, чтобы определить, является ли ячейка редактируемой. tableView:canEditRowAtIndexPath: является сообщением протокола UITableViewDataSource. Причиной, по которой он является частью источника данных, является b / c, как правило, именно логика модели данных определяет, следует ли редактировать данные в конкретной ячейке. В обоих ваших примерах вы используете тип ячейки в качестве прокси для типа данных в ячейке.

Лучшая проверка была бы аналогична логике, которую вы должны использовать в tableView:cellForRowAtIndexPath:, чтобы определить, какую ячейку использовать.

Не зная специфики модели данных, я не могу дать вам точный код, но это что-то вроде:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return [self chatDataTypeAtIndexPath:indexPath] == ChatDataTypeMessage;
}
0 голосов
/ 10 апреля 2011

Вы должны исправить первую опцию, оператор '==' проверит сравнение указателей и не будет сравнивать сами строки, что делает isEqualToString:

Так что это должно выглядеть так:

return[ [[chatContent cellForRowAtIndexPath:indexPath] reuseIdentifier] isEqualToString:MessageCellId];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...