Я пытаюсь настроить пункты меню UIMenuController для функциональности, аналогичной функции iOS Medium:
Существует множество потоков, посвященных этой конкретной задаче, но, несмотря на десятки тысяч просмотров и различные результаты, в том числе то, что она не работает для достаточно значительного числа людей ... не похоже, что есть решение это работает последовательно для UITextView.
Мне удалось добавить пользовательский пункт меню «printToConsole», но я не могу отключить стандартные пункты меню Apple, такие как вырезать, копировать, вставить, B I U, и т.д.
Похоже, консенсус заключается в том, что я должен переопределить canPerformAction, чтобы отключить эти элементы меню по умолчанию, но это, похоже, не работает:
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
print("canPerformAction being called")
if action == #selector(cut(_:)) {
return false
}
if action == #selector(copy(_:)) {
return false
}
if action == #selector(select(_:)) {
return false
}
if action == #selector(paste(_:)) {
return false
}
if action == #selector(replacementObject(for:)) {
return false
}
if action == #selector(selectAll(_:)) {
return false
}
if action == #selector(printToConsole) {
return true
}
return super.canPerformAction(action, withSender: sender)
}
Это остаток моего соответствующего кода:
func addCustomMenu() {
let consolePrintAction = UIMenuItem(title: "Print To Console", action: #selector(printToConsole))
UIMenuController.shared.menuItems = [consolePrintAction]
UIMenuController.shared.update()
}
@objc func printToConsole() {
if let range = articleTextView.selectedTextRange, let selectedText = articleTextView.text(in: range) {
print(selectedText)
}
}
И на мой взгляд DidLoad:
articleTextView.delegate = self
addCustomMenu()
Я также настроил свой viewController на UITextViewDelegate. Некоторые предполагают, что если вы просто создадите подкласс TextView, это будет как-то работать. Я не смог заставить это работать, так что, если это действительно ответ, кто-то может привести пример?
Опять же, я знаю, что это может показаться дубликатом, но вышеприведенное решение перестало работать с обновлением iOS.
Спасибо.