Как разрешить пользователям переупорядочивать разделы в UITableView

Я работаю над приложением с акциями, расположенными в портфелях. Таким образом, это естественное соответствие табличному представлению, и я работаю над редактированием; это достаточно просто, чтобы позволить пользователю добавлять или удалять акции, тащить их в одном портфолио или другом портфолио, но одна вещь, которую я не смог сделать изящно, – это позволить пользователю перетащить один портфель выше или ниже другого.

Сейчас у меня есть хакерское решение, где строка 0 каждого раздела – это имя портфеля, и если они перетаскивают эту строку над другим портфелем, вся таблица перезагружается при переключении портфелей. Это работает, но не очень естественно.

Я уверен, что я не первый, кто столкнулся с этой проблемой; у кого есть более совершенное решение?

Связанный с этим вопрос – как мне разрешить пользователям создавать новый портфолио / раздел?

Очень просто:

#import "ViewController.h" @interface ViewController () @end @implementation ViewController { NSMutableArray *_data; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _data = [NSMutableArray arrayWithObjects:@"One", @"Two", @"Three", nil]; self.tableView.editing = YES; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return _data.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *identifier = @"reuseIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } cell.textLabel.text = _data[indexPath.row]; cell.showsReorderControl = YES; return cell; } - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleNone; } - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { [_data exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row]; } @end 

РЕДАКТИРОВАТЬ:

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

https://github.com/MichaelSnowden/TableViewInCell

Если это не сработает для вас, попробуйте сделать UITableView moveSection:(NSInteger) toSection:(NSInteger) выглядеть красиво. Документация для этого метода приведена здесь .

Мой опыт с вышеописанным методом заключался в том, что он очень прост в использовании, и он выглядит хорошо, когда он называется. Разумным способом использовать его было бы создание заголовков с помощью распознавателей жестов. В первом касании выделите этот раздел и запишите, что indexPath, а во втором касании вызовите метод на двух указательных дорожках. Он должен работать хорошо, но вы не получите от него перетаскивания.

  • Метод делегата Swift tableView не получает вызова
  • UITableView выполняет удаление и вставку строк в каскадной анимации
  • Расширяющиеся ячейки просмотра таблицы исчезают
  • UITableView didSelectRowAtIndexPath: не работает
  • В xcode 6.1, построитель интерфейса, удаляющий элементы ui
  • UITableView didSelectRowAtIndexPath не работает после обновления до iOS8
  • Как изменить цвет / фон области отказов для горизонтального UITableView
  • Как создать UITableView с настраиваемым режимом редактирования
  • iOS8 Beta 3 UITableViewCell layoutSubviews бесконечный цикл
  • UITableViewController с разделом и Parse как сервер BackEnd
  • Изменение содержимого UITableView без изменения его содержимого?
  • Давайте будем гением компьютера.