В моем приложении мне нужно иметь возможность отслеживать, из какой ячейки происходит UITextField, когда я фиксирую изменения редактирования в textFieldDidEndEditing:
. Для этого я просто установил свойство тега в текстовом поле ячейки в tableview:cellForRowAtIndexPath:
.
Когда клетки перемещаются, это вызывает некоторые проблемы. Например, если я переместу нижнюю ячейку вверх, удаляю ячейку, которая сейчас находится внизу, а затем попытаюсь отредактировать ячейку, которую я только что поместил сверху, мое приложение вылетит, потому что свойство tag все еще находится на (или другое число), но в моем источнике данных не так много элементов.
Я попытался исправить эту проблему, обновив тег в tableView:moveRowAtIndexPath:toIndexPath:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
NSString *siteToMove = [[sites objectAtIndex:[fromIndexPath row]] retain];
[sites removeObjectAtIndex:[fromIndexPath row]];
[sites insertObject:siteToMove atIndex:[toIndexPath row]];
if ([toIndexPath section] == 1) {
[[(BookmarkTextEntryTableViewCell *)[[self tableView] cellForRowAtIndexPath:toIndexPath] textField] setTag:[toIndexPath row]];
}
}
Однако это не работает, потому что (BookmarkTextEntryTableViewCell *)[[self tableView] cellForRowAtIndexPath:toIndexPath]
возвращает ячейку, которая была там до перемещения строки.