Как добавить пользовательский menuItem в longPressGesture textview и вызвать это действие menuItems при нажатии? - PullRequest
0 голосов
/ 21 октября 2019

Мне нужно добавить «Подсветка» в качестве нового пользовательского пункта меню при длительном нажатии в текстовом окне. Я смог удалить «Lookup», который мне не нужен, но не смог понять, как добавить дополнительные пункты меню.

  1. В моем коде SwiftUI CustomUITextView расширяет UITextView,
class CustomUITextView: UITextView {

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if action == #selector(UIResponderStandardEditActions.cut(_:))  ||
            action  == Selector(("_define:")) ||
            action  == #selector(UIResponderStandardEditActions.paste(_:)) ||
            action  == Selector(("_promptForReplace:")){
            return false;
        }
        else {
            return super.canPerformAction(action, withSender: sender)
        }
    }
}
и TextView соответствует протоколу UIViewRepresentable -
struct TextView : UIViewRepresentable {

    var contents: NSAttributedString

    func makeUIView(context: Context) -> CustomUITextView {
        let customTextView = CustomUITextView()
        customTextView.isEditable = false
        customTextView.isUserInteractionEnabled = true
        return customTextView
    }

    func updateUIView(_ uiView: CustomUITextView, context: Context) {
        uiView.attributedText = contents
    }
}
В Swift я знаю, что код для добавления пользовательских элементов меню будет следующим:
    func addSpecialMenu() {
        let menuController = UIMenuController.shared
        var menuItem = [UIMenuItem]();
        let highlightMenuItem = UIMenuItem(title: "Highlight", action: #selector(onHighlightClicked));
        menuItem.append(highlightMenuItem);
        menuController.menuItems = menuItem;
    }

Я попытался вызвать addSpecialMenu () для longPressGesture. Но не смог заставить его работать. Как я могу добавить пользовательскую ссылку меню в SwiftUI .?

1 Ответ

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

Я думаю, что вы пытаетесь реализовать CustomMenu, который существует в SwiftUI.

Вы объявляете это так:

Text("Includes hidden menu")
    .contextMenu {
        Button(action: { }) {
            HStack {
                Image(systemName: "trash")
                Text("Delete")
            }
        }
        Button(action: { }) {
            HStack {
                Image(systemName: "pencil.tip")
                Text("Highlight")
            }
        }
    }

И это проявляется при длительном нажатии на элементприкреплен к:

ContextMenu

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