Есть ли простой способ перетащить UITableViewCell между двумя UITableViews? - PullRequest
11 голосов
/ 26 марта 2010

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

1 Ответ

11 голосов
/ 07 мая 2010

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

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

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

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

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

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

<code>@protocol DragAndDropDestination</p>

<ul>
<li>(void)droppedItem:(NSDictionary *)item withTouch:(UITouch *)touch;</li>
</ul>

<p>@end</p>

<p>@interface DragAndDropViewController : UIViewController 
{
    id _dropDestination;
    NSDictionary *_draggedItem;
    UIImageView *_icon;
}</p>

<p>@property (nonatomic, assign) id dropDestination;
@property (nonatomic, retain) NSDictionary *draggedItem;</p>

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

<p>@end

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...