Блоки контекстного меню Перетащите в новое окно - PullRequest
0 голосов
/ 26 октября 2019

Это приложение для iPadOS / iOS 13 реализует как несколько окон, так и перетаскивание. Почти в каждом случае оба работают отлично.

Мы сталкиваемся с нашей единственной проблемой в табличном представлении, которое реализует методы контекстного меню UITableViewDelegate.

- tableView:contextMenuConfigurationForRowAtIndexPath:point:Beta
- tableView:willPerformPreviewActionForMenuWithConfiguration:animator:Beta

Если мы инициируем перетаскивание до появления контекстного меню мы можем успешно перетащить элемент в новое окно (UIScene), переместив его к краю экрана. Однако, если мы инициируем перетаскивание после появления контекстного меню, невозможно перетащить элемент в новое окно или сцену.

Кто-нибудь знает, из-за чего возникла проблема? это?

Вот два контрастных видео, демонстрирующих проблему:

Отказ

This is the drag and drop failing.

Успех

This is the drag and drop succeeding.

1 Ответ

0 голосов
/ 26 октября 2019

Идентифицированная проблема

В viewDidAppear: мы выполняли следующее:

UISceneActivationConditions *conditions = self.view.window.windowScene.activationConditions;
conditions.prefersToActivateForTargetContentIdentifierPredicate = [NSPredicate predicateWithFormat:@"self == %@", self.note.noteID];
conditions.canActivateForTargetContentIdentifierPredicate = [NSPredicate predicateWithFormat:@"self == %@", self.note.noteID];

Когда отображалось контекстное меню, вызывался viewDidAppear: и.activationConditions были применены к текущей UIScene.

Обратите внимание, что контроллер предварительного просмотра в контекстном меню разделяет детали NSUserActivity с элементом drag + drop, и поэтому .targetContentIdentifier NSUserActivity мы пытались перетащитьсоответствует предикату .activationConditions текущей UIScene. Следовательно, при отображении контроллера представления предварительного просмотра в контекстном меню мы говорили системе, что текущий UIScene является оптимальным получателем события перетаскивания, не позволяя другим новым окнам получать его (по крайней мере, это мое предположение).

(Хотя я не согласен с таким поведением, похоже, что условия активации UIScene интерпретируются в этой iOS 13.1.3.)

Решение

Чтобы исправить это, я просто запретил настройку .activationConditions при отображении контроллера представления в контекстном меню.

Вот обновленное видео , показывающее успешное перетаскивание + падение, даже сОтображаемое контекстное меню: Successfully using drag and drop with Context Menu

...