2014-01-06 2 views
0

Я реализовал тело метода moveRowAtIndexPath: toIndexPath: следующим образом:Вызов moveRowAtIndexPath из TableViewController

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath 
{ 
    XYZToDoItem *itemToMove = [self.toDoItems objectAtIndex:fromIndexPath.row]; 
    NSLog(@"Moving"); 
    NSLog(itemToMove.itemName); 

    [self.toDoItems removeObjectAtIndex:fromIndexPath.row]; 
    [self.toDoItems insertObject:itemToMove atIndex:toIndexPath.row]; 
} 

я хотел бы, чтобы вызвать этот метод из didSelectRowAtIndexPath метода TableViewController в.

Когда я делаю строки таблицы, перемещаюсь, но описанный выше метод, похоже, не выполняется. Ничего не записывает на консоль и элементы в массиве toDoItems НЕ меняйте местами.

Вот тело этого метода:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSIndexPath *indexPathOfLastItem = 
    [NSIndexPath indexPathForRow:([self.toDoItems count] - 1) inSection:0]; 

    [tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem]; 
} 

Как получить вид таблицы, чтобы перемещать строки правильно внутри делегата (TableViewController)?

+0

ли вы что TableView DataSource МЕТОД протокола Tableview: canMoveRowAtIndexPath :? – ldindu

ответ

2

Я не думаю, что вы правильно вызываете метод, так как это не настоящий метод делегата, который вы должны называть его самим.

Попытка:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSIndexPath *indexPathOfLastItem = 
    [NSIndexPath indexPathForRow:([self.toDoItems count] - 1) inSection:0]; 

    [self tableView:tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem]; 
} 
+0

Работает как очарование. Спасибо! КТО какая глупая ошибка. – ZviBar

4

Перемещение (или добавление, удаление) просмотр таблицы строк с помощью кода (а не с помощью взаимодействия с пользователем) делает не причина методов источника данных будет называться.

Если вам нужен метод источника данных, которая будет выполнена, вам нужно вызвать его в явном виде:

// Move table view row: 
[tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem]; 
// Call data source method: 
[self tableView:tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem]; 

Swift 3:

// Move table view row: 
tableView.moveRow(at: indexPath, to: indexPathOfLastItem) 
// Call data source method: 
self.tableView.moveRow(at: indexPath, to: indexPathOfLastItem) 
+0

Означает ли это, что мне нужно вызвать два вышеуказанных метода, чтобы получить желаемый результат, который равен 1. Переместить таблицу вида строки и 2. Переместить элементы в источнике данных? – ZviBar

+0

@Bonzoq: Да, насколько я помню. (Но я не тестировал его недавно. Возможно, вы можете сделать быстрый тест.) –

+0

Да, я тестировал его, и в противном случае он не работает. Я просто спрашиваю, потому что это выглядело не очень профессионально для меня, но, видимо, так оно и должно быть. – ZviBar

Смежные вопросы