Я загружаю некоторый контент из Интернета в UIWebView
, но я бы хотел, чтобы все ссылки были отключены в UIWebView
. Это возможно? Я мог разобрать текст, но я ищу что-то проще.
Отключить ссылки в UIWebView?
Ответ 1
Вы можете дать UIWebView
a delegate и реализовать -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;
}
Ответ 2
Протестировано в 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
}
Ответ 3
Вы можете отключить обнаружение данных в своем веб-просмотре.
[webView setDataDetectorTypes:UIDataDetectorTypeNone];
Ответ 4
Простой ответ, который работает в Swift 2.0:
yourWebView.dataDetectorTypes = UIDataDetectorTypes.None
Просто реализуйте его в контроллере представления, где вы определяете и используете свой веб-просмотр, и он будет работать безупречно.
Ответ 5
У меня была аналогичная потребность, и для некоторых случаев просто использование 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 не был запущен, и пользователь мог перемещаться в этот "короткий" интервал.
Ответ 6
Для быстрого 3:
Попробуйте удалить типы, которые вы не хотите показывать в качестве ссылки из webView.dataDetectorTypes
webView.dataDetectorTypes.remove(UIDataDetectorTypes.all)
Ответ 7
Еще один ответ для Swift 3.0:
Просто дайте ноль, чтобы не обнаружить ссылку какого-либо типа исходного кода вашего веб-браузера
yourWebView.dataDetectorTypes = UIDataDetectorTypes(rawValue: 0)