禁止UITextField、UITextView、UIWebView、WKWebView的UIMenuController彈出選擇框
阿新 • • 發佈:2019-02-01
上一篇文章我們講述了UIMenuController的使用.這一篇講一講原生的遮蔽.
對於UITextField、UITextView、UIWebView這三個.可以直接子類化,或者是分類,然後在.m裡面重寫- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
然後返回NO即可.
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
return NO;
}
但是對於WKWebView就不能這麼做了,因為WKWebView不能子類化.經過一番搜尋,發現可以用js的方法禁止.
// 禁止選擇CSS NSString *css = @"body{-webkit-user-select:none;-webkit-user-drag:none;}"; // CSS選中樣式取消 NSMutableString *javascript = [NSMutableString string]; [javascript appendString:@"var style = document.createElement('style');"]; [javascript appendString:@"style.type = 'text/css';"]; [javascript appendFormat:@"var cssContent = document.createTextNode('%@');", css]; [javascript appendString:@"style.appendChild(cssContent);"]; [javascript appendString:@"document.body.appendChild(style);"]; // javascript注入 WKUserScript *noneSelectScript = [[WKUserScript alloc] initWithSource:javascript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; WKUserContentController *userContentController = [[WKUserContentController alloc] init]; [userContentController addUserScript:noneSelectScript]; WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; configuration.userContentController = userContentController; // WKWebView 初始化 WKWebView *webView = [[WKWebView alloc] initWithFrame:frame configuration:configuration]; //獲取WKWebView選中的內容 NSString *highlighted = [_webView stringByEvaluatingJavaScriptFromString:@"window.getSelection().toString();"];