2014-09-25 24 views
7

Ho un'app con un WKWebView in esso. In questa app, personalizzo le opzioni presentate nello UIMenuController. La visualizzazione Web sembra aggiungere le opzioni Copia e Definisci al menu, indipendentemente da ciò che faccio. Se mi metto come primo risponditore e restituisco NO per tutto, continuo a copiare e definire le opzioni. E ho implementato la mia opzione di copia che fa cose speciali a seconda delle preferenze dell'utente e che cosa è esattamente selezionato. C'è un modo per rimuovere queste opzioni extra?WKWebView e UIMenuController

Aggiornamento: Ho archiviato questo come radar 18487289.

+1

Ho lo stesso problema, qualche progresso? – avdyushin

+0

@avdyushin no. Ma io sono al WWDC. Andando a chiedere a qualcuno questa settimana. –

+0

@avdyushin è un problema noto ma nessuna cronologia. La soluzione completa per ora è di nascondere il menu su willShow e creare e presentare il tuo con tutte le opzioni che vuoi. –

risposta

2

Per iOS 11, semplicemente sottoclasse WKWebView e override canPerformAction per tornare false:

class WebView : WKWebView { 
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 
     return false 
    } 
} 

Per iOS 10 o precedente, swizzle WKContentViewcanPerformAction metodo 's:

@objc private extension UIResponder { 
    func swizzle_canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 
     return false 
    } 
} 

guard let viewClass = NSClassFromString("WKContentView") as? UIView.Type else { return } 
method_exchangeImplementations(
    class_getInstanceMethod(viewClass, #selector(UIResponder.canPerformAction))!, 
    class_getInstanceMethod(UIResponder.self, #selector(UIResponder.swizzle_canPerformAction))! 
) 

Dopo aver rimosso le voci di menu incorporate di quelle viste Web, è possibile aggiungere le voci di menu personalizzate tramite UIMenuController.shared come normale.