Существует ли простой способ перетащить UITableViewCell между двумя UITableViews?

Поскольку в заголовке говорится. Переупорядочение в единственном UITableView тривиально, но экран iPad является достаточно большим для отображения нескольких UITableViews одновременно. Таким образом, кажется, что должен быть способ перетащить UITableViewCell между двумя UITableViews. Какие-либо мысли о лучшем подходе?

11
задан Steve Simitzis 26 March 2010 в 19:18
поделиться

1 ответ

Моим решением было использование пользовательского UIGestureRecognizer для отслеживания событий касания и отдельного представления для отрисовки операции перетаскивания.

Это работает, потому что UIGestureRecognizer не блокирует цепочку ответчиков. Из документации UIGestureRecognizer:

Объекты UIGestureRecognizer не находятся в цепочке ответчиков, но наблюдают касания, проверенные на попадание в их представление и вложенные представления их представления.

Создайте пользовательский UIViewController (DragAndDropViewController) и добавьте его представление к родительскому представлению представлений, в которых вы хотите, чтобы происходила операция перетаскивания. Используйте свой класс распознавателя жестов для передачи информации о прикосновении в DragAndDropViewController.

Источник сообщает контроллеру DragAndDropViewController, откуда происходит перетаскивание (и любую пользовательскую информацию). Контроллер также должен иметь ссылку делегата на место назначения падения. Когда происходит падение, отправьте делегату событие UITouch (не рекомендуется, согласно Apple, но объект UITouch необходим для получения правильного расположения в представлении назначения).

Вот как выглядит мой DragAndDropViewController:

@protocol DragAndDropDestination

  • (void)droppedItem:(NSDictionary *)item withTouch:(UITouch *)touch;

@end

@interface DragAndDropViewController : UIViewController { id _dropDestination; NSDictionary *_draggedItem; UIImageView *_icon; }

@property (nonatomic, assign) id dropDestination; @property (nonatomic, retain) NSDictionary *draggedItem;

// Source sends this message - (void)startDraggingWithItem:(NSDictionary *)item;

@end

Как только место назначения получит сообщение, вы можете использовать - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event, чтобы получить точный вид в месте назначения падения.

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

11
ответ дан 3 December 2019 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: