Отключить ссылки в UIWebView?
я загружаю некоторый контент из интернета в UIWebView
, но я бы хотел, чтобы все ссылки были отключены в UIWebView
. Возможно ли это? Я мог бы разобрать текст, но я ищу что-то попроще.
7 ответов
вы можете дать UIWebView
a делегат и реализовать -webView:shouldStartLoadWithRequest:navigationType:
метод делегата return NO;
(за исключением начальной загрузки).
что избавит пользователя от просмотра, но все одной странице.
в качестве примера предложено в комментариях... Начать с allowLoad=YES
и затем:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
return allowLoad;
}
- (void)webViewDidFinishLoad:(UIWebView*)webView {
allowLoad = NO;
}
протестировано в Swift 4.0: этот подход не предполагает наличия дополнительной переменной для проверки, является ли это начальной нагрузкой или нет. Просто проверьте тип запроса (в этом случае LinkClicked) и верните false в этом случае. В противном случае просто возвращает true!
(конечно, убедитесь, что вы выберите webView.delegate
)
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if navigationType == .linkClicked {
return false
}
return true
}
вы можете отключить обнаружение данных из вашего webview.
[webView setDataDetectorTypes:UIDataDetectorTypeNone];
для swift 3:
Попробуйте удалить видах, которые вы не хотите показывать как ссылку webView.dataDetectorTypes
webView.dataDetectorTypes.remove(UIDataDetectorTypes.all)
простой ответ, который работает в Swift 2.0:
yourWebView.dataDetectorTypes = UIDataDetectorTypes.None
просто реализуйте его в контроллере представления, где вы определяете и используете свой веб-вид, и он будет работать безупречно.
У меня была аналогичная потребность, и для некоторых случаев просто использовать webViewDidFinishLoad было недостаточно, поэтому я использовал webViewDidStartLoad для покрытия всех случаев:
func webViewDidStartLoad(webView: UIWebView) {
startedLoading = true
}
func webViewDidFinishLoad(webView: UIWebView) {
alreadyOpen = true
}
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
if startedLoading && alreadyOpen {
// do something
return false
}else if startedLoading && !alreadyOpen{
return false
}else if !startedLoading {
return true
}
return true
}
в некоторых случаях, когда html был загружен, но некоторые ресурсы, такие как изображения и некоторые тяжелые активы внутри DOM, не были запущены методом didFinishLoad, и пользователь мог перемещаться в этом "коротком" интервале.
еще один ответ для Swift 3.0:
Просто дайте ноль, чтобы не обнаружить ссылку типа исходного кода yourWebView
yourWebView.dataDetectorTypes = UIDataDetectorTypes(rawValue: 0)