Получить табличное представление insertRowsAtIndexPaths для принятия indexOfObject? - PullRequest
1 голос
/ 01 мая 2010

У меня есть фрагмент кода, который выглядит следующим образом:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[array indexOfObject:[array objectAtIndex:indexPath.row]]] withRowAnimation:UITableViewRowAnimationLeft];
[tableView endUpdates];
[tableView reloadData];

Выполняется, когда пользователь нажимает на аксессуар. Первая часть предназначена только для обеспечения плавной анимации, и на самом деле это не имеет значения, поскольку tableView перезагружается через миллисекунды, но, как я уже сказал, он предназначен для предоставления анимации.

Предполагается переместить выбранный объект из его текущего indexPath в значение из массива с тем же indexPath.

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

PS: я получаю предупреждение и при компиляции. Обычный «передаваемый аргумент 1 для arrayWithObject: делает указатель из целого числа без приведения ...» (строка 3)

Заканчивается этим фрагментом:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[array indexOfObject:[arraySubFarts objectAtIndex:indexPath.row]] inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];

[tableView reloadData];

Ответы [ 2 ]

1 голос
/ 01 мая 2010
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[array indexOfObject:[array objectAtIndex:indexPath.row]]] withRowAnimation:UITableViewRowAnimationLeft];

Взяв эту строку и разделив ее, вы получите следующее:

NSObject *obj = [array objectAtIndex:indexPath.row];
int *index = [array indexOfObject:obj];
NSArray *otherArray = [NSArray arrayWithObject:index];
[tableView insertRowsAtIndexPaths:otherArray withRowAnimation:UITableViewRowAnimationLeft];

То, что вы, вероятно, хотите, это:

NSObject *obj = [array objectAtIndex:indexPath.row];
NSIndexPath *index = [NSIndexPath indexPathForRow:[array indexOfObject:obj] inSection:0];
NSArray *otherArray = [NSArray arrayWithObject:index];
[tableView insertRowsAtIndexPaths:otherArray withRowAnimation:UITableViewRowAnimationLeft];

Но почему ты не можешь сделать это?

NSArray *otherArray = [NSArray arrayWithObject:indexPath];
[tableView insertRowsAtIndexPaths:otherArray withRowAnimation:UITableViewRowAnimationLeft];

Получение объекта из массива с использованием индекса, а затем использование объекта для поиска индекса представляется излишним. Просто используйте индекс.


Редактировать с большим кодом:

NSNumber *obj = [NSNumber numberWithInt:indexPath.row];
int *index = [array indexOfObject:obj];
NSIndexPath *index = [NSIndexPath indexPathForRow:index inSection:0];
NSArray *otherArray = [NSArray arrayWithObject:index];
[tableView insertRowsAtIndexPaths:otherArray withRowAnimation:UITableViewRowAnimationLeft];
1 голос
/ 01 мая 2010

Вы можете использовать NSIndexPath метод расширения класса +indexPathForRow:inSection: для преобразования строки в индексный путь. Подробнее здесь .

Если ваша единственная цель удаления и вставки строки - вызвать анимацию, рассматривали ли вы метод reloadRowsAtIndexPaths:withRowAnimation:?

...