Обновление для iOS 13,4 (март 2020 г.):
Это также происходит с UIPointerInteraction
при наведении на ссылки.
I есть представление, которое отображает форматированный текст и показывает контекстное меню iOS 13, когда пользователь долго нажимает на ссылку. Я хочу иметь возможность выделить только ссылку, а не весь вид, когда пользователь начинает долго нажимать.
Для этого я предоставляю объект UITargetedPreview
, который содержит UIPreviewParameters
с CGRect
s. каждой строки, которая будет выделена до UIContextMenuInteractionDelegate
представления. Это правильно выделяет ссылку, , но имеет нежелательный побочный эффект, который также скрывает остальную часть вида .
Это изображение демонстрирует проблему:
Обратите внимание, что, хотя ссылка выделена правильно, остальная часть представления мигает, когда ссылка долго нажимается, а затем освобождается.
Сравните это с поведением в собственных заметках Apple.app:
Обратите внимание, что остальная часть представления не исчезает при длительном нажатии на ссылку. Это также работает, как и ожидалось, в других приложениях Apple (например, Safari).
Я предоставляю UITargetedPreview
s делегату взаимодействия следующим образом:
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, previewForHighlightingMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? {
guard let range = configuration.identifier as? NSRange else { return nil }
let lineRects: [NSValue] = // calculate appropriate rects for the range of text
let parameters = UIPreviewParameters(textLineRects: lineRects)
return UITargetedPreview(view: /* the rich text view */, parameters: parameters)
}
func contextMenuInteraction(_ interaction: UIContextMenuInteraction, previewForDismissingMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? {
guard let range = configuration.identifier as? NSRange else { return nil }
let lineRects: [NSValue] = // calculate appropriate rects for the range of text
let parameters = UIPreviewParameters(textLineRects: lineRects)
return UITargetedPreview(view: /* the rich text view */, parameters: parameters)
}
I ничего не могу найти в какой документации есть для UITargetedPreview
и UIPreviewParameters
, так кто-нибудь знает, как это можно сделать?