У меня странная проблема, и я не могу понять, что мне не хватает. У меня есть UITableView, который можно редактировать на месте (то есть, когда мой пользовательский интерфейс загружен, я отправляю свою таблицу setEditing: YES animated: YES message). Последняя строка таблицы должна быть строкой «Добавить новую». Все строки, кроме последней строки в моей таблице, можно перемещать. Ни одна из строк не может быть удалена.
Строки отображаются правильно, а грабберы отображаются справа от всех строк, кроме последней (как и предполагалось). Проблема в том, что я не могу переместить строки. Когда я нажимаю на граббер, чтобы переместить строку, он как бы покачивается, но я не могу перетащить его вверх или вниз. Вот соответствующий фрагмент кода:
- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewCellEditingStyleNone;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == [self.itemArray count] ) {
return NO;
}
return YES;
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == [self.itemArray count]) {
return NO;
}
return YES;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
Item *item = [self.itemArray objectAtIndex:fromIndexPath.row];
[self.itemArray removeObjectAtIndex:fromIndexPath.row];
[self.itemArray insertObject:item atIndex:toIndexPath.row];
}
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
if ([proposedDestinationIndexPath row] < [self.itemArray count]) {
return proposedDestinationIndexPath;
}
NSIndexPath *betterIndexPath = [NSIndexPath indexPathForRow:[self.itemArray count]-1 inSection:0];
return betterIndexPath;
}
При попытке отладки кажется, что tableView: moveRowAtIndexPath: вызывается почти сразу, даже когда я держусь за захват (т.е. я еще не поднял палец). Более того, мой tableView: targetIndexPathForMoveFromRowAtIndexPath: предложилDestinationIndexPath: вообще не вызывается.
Есть мысли о том, что я делаю не так? Любые предложения о том, что я должен попытаться решить эту проблему?