Я успешно добавляю аннотацию выделения в pdf, используя swift и PDFKit, но я не могу понять, как позволить пользователю снова удалить выделение.
Пользователь может выбрать текст в обычном режиме, изатем выберите «Выделение» или «Удалить выделение» из UIMenu.
Чтобы настроить pdfView при выделении текста, я изменил появившееся меню - сначала удалив действия по умолчанию:
extension PDFView {
override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return false
}
}
Затем в viewDidLoad () я установил свои пользовательские UIMenuItems:
let menuItem1 = UIMenuItem(title: "Highlight", action: #selector(highlightSelection(_:)))
let menuItem2 = UIMenuItem(title: "Remove highlight", action: #selector(removeHighlightSelection(_:)))
UIMenuController.shared.menuItems = [menuItem1, menuItem2]
При выборе выделения:
@objc func highlightSelection(_ sender: UIMenuItem) {
let selections = pdfViewer.currentSelection?.selectionsByLine()
guard let page = selections?.first?.pages.first else { return }
selections?.forEach({ selection in
let highlight = PDFAnnotation(bounds: selection.bounds(for: page), forType: .highlight, withProperties: nil)
highlight.color = .yellow
page.addAnnotation(highlight)
})
}
Пока все хорошо - все работает нормально до этого момента. Текст подсвечивается и создается аннотация.
Теперь возникает моя проблема:
Когда я выделяю выделенный текст, я хочу, чтобы пользователь мог удалить аннотацию выделения, нажав «Удалить выделение», ноЯ просто не могу понять, как удалить только аннотацию, которая скрывается «за» выделенным текстом.
Этот код работает, но удаляет все аннотации на всей странице:
@objc func removeHighlightSelection(_ sender: UIMenuItem) {
let selections = pdfViewer.currentSelection?.selectionsByLine()
guard let page = selections?.first?.pages.first else { return }
let annotationsToRemove = page.annotations
for annotation in annotationsToRemove {
page.removeAnnotation(annotation)
print("Removed: \(annotation)")
}
}
Таккак удалить только выделенную аннотацию выделения?
Кстати - я знаю, что все меню не очень актуально, но я надеюсь, что кто-нибудь найдет этот вопрос при работе с аннотациями выделения, а затембыть в состоянии использовать эту часть.
Спасибо, Эмиль.