Как добавить пользовательский элемент меню в указанную позицию UIMenuController?

В UIMenuController есть пять пунктов меню по умолчанию: «Вырезать», «Копировать», «Вставить», «Поиск», «Поделиться»... Я хочу добавить один настраиваемый элемент меню «Вставить и найти» между меню «Вставить» и «Поиск».


person lypw2009    schedule 09.05.2018    source источник
comment
Вы будете использовать для WebView   -  person Abdelahad Darwish    schedule 09.05.2018


Ответы (1)


Вы можете сделать это, отключив системное меню и создав собственное меню, используя UIMenuController

Начните с подкласса вашего представления, скажем, UIWebView или UItextView , UIScrollView,..etc и ovveride этот метод override func canPerformAction(_ action: Selector, withSender sender: Any?), чтобы отключить пункт системного меню

Вот так — Пример UIWebView

import UIKit

class CustomWebView: UIWebView {
   override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
          return false  // Disable Menu system
       }
 }

Затем начните создавать свое собственное меню и реализуйте его функции копирования, вставки,...

class  ViewController: UIViewController{

    @IBOutlet var webView: CustomWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.webView.loadHTMLString("<p>Hello, world!</p>", baseURL: nil)
        enableCustomMenu()
    }



    func enableCustomMenu() {
        let cut = UIMenuItem(title: "Cut", action: #selector(runCut))
        let copy = UIMenuItem(title: "Copy", action: #selector(runCopy))
        let paste = UIMenuItem(title: "Paste", action: #selector(runPaste))
        let pasteSearch = UIMenuItem(title: "Paste and Search", action: #selector(runPasteSearch))
        let look = UIMenuItem(title: "Look Up", action: #selector(runLook))

   //  ----> here Arrange as you can
        UIMenuController.shared.menuItems = [cut,copy,paste,pasteSearch,look]
    }

    func disableCustomMenu() {
        UIMenuController.shared.menuItems = nil
    }

    @objc func runCut() {
    }
    @objc func runCopy() {
        let text = webView.stringByEvaluatingJavaScript(from: "window.getSelection().toString();")
        print(text ?? "")
    }
    @objc func runPaste() {

    }
    @objc func runPasteSearch() {

    }
    @objc func runLook() {

    }
}
person Abdelahad Darwish    schedule 09.05.2018
comment
Как добавить пользовательское действие для поиска? - person Vincent_Paing; 03.03.2020