Я собираюсь предположить, что то, что вы хотите иметь некоторое описание или текст в некоторых место и разрешить внутри некоторой части текста сделать clickable/tapped, и для этого вы хотите использовать WKWebView
.
Я решил эту проблему, используя WKWebView
тоже в некоторых приложениях, которые я сделал давно, конечно, есть несколько решений, это всего лишь один из них, ничего другого.
Как вам сказали некоторые люди, вы можете использовать функцию loadHTMLString
для загрузки строки HTML с вашего сервера в JSON или в любом случае, но очень важно, чтобы HTML был хорошо отформатирован без ошибок.
Очень важный момент о функции loadHTMLString
относительно вашего комментария ... Вы, как правило, ожидают, что аа серый фон появляется, когда пресс-ссылку, как вы можете видеть на изображении ниже, это не произойдет, если в HTML не имеют какого-то стиля CSS, потому что если он не имеет стиль по умолчанию для любого из <a><\a>
.
Итак, давайте посмотрим на следующий код:
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
var wkWebView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// The part of the HTMl you want to show
let description = "Let's start to visit the <a href=\"http://www.apple.com/\">Apple</a> website first and then if you want the <a href=\"http://www.w3schools.com\">Developer Apple</a> website."
// The default HTML with body and styles formatted and the description inside using string interpolation.
let htmlString = "<html><head><style type=\"text/css\">body {font-family: \"Lato-Regular\";font-size: 35px;color: #333333;margin: 0;}a {text-decoration: none; color: #999;}</style></head><body>\(description)</body></html>"
let preferences = WKPreferences()
preferences.javaScriptEnabled = false
// Configuration for any preferences you want to set
let configuration = WKWebViewConfiguration()
configuration.preferences = preferences
wkWebView = WKWebView(frame: CGRectMake(5, 35, self.view.bounds.width, self.view.bounds.height), configuration: configuration)
if let theWebView = wkWebView {
theWebView.loadHTMLString(htmlString, baseURL: NSURL())
theWebView.navigationDelegate = self
self.view.addSubview(theWebView)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
}
func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
}
func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Ok", style: .Default) { (UIAlertAction) -> Void in
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
})
presentViewController(alert, animated: true, completion: nil)
}
}
В приведенном выше коде я установил переменную description
с текстом с интерактивными элементами внутри него и добавил двух методов делегат didStartProvisionalNavigation
и didFinishNavigation
показать в в networkActivityIndicatorVisible
чтобы показать некоторый прогресс в загрузке страницы при нажатии на текст, который можно щелкнуть. Приятно заметить, что в переменной htmlString
я установил некоторые стили, чтобы показать <a>
с некоторым цветом и шрифтом, это зависит от вас.
Я добавил также функцию didFailProvisionalNavigation
, чтобы показать предупреждение в некоторых случаях URL-адрес не является действительным что-то вроде нового HTTPTransportSecurityLayer
добавляемого IOS 9, чтобы только HTTPS, в некоторых случаях вы можете использовать его для проверки URL и знать причину ошибки.
В результате получается следующий текст в нормальном UIViewController
:
И при нажатии любого серого текста URL будет загружен в том же WKWebView
, конечно, вы можете настроить это открывайтесь во внутреннем браузере, который вы делаете или что-то еще, это зависит от вас.
И тогда вы можете увидеть результат сразу же, если вы нажмете Apple,:
Если вместо того, чтобы вы нажмете разработчиков Apple вы можете увидеть предупреждение в действии, потому что в HTTP протокола введите ошибку в HTTPTransportSecurityLayer
в iOS 9:
У меня есть проект, готовый загрузить в Github, если вам это нужно. Надеюсь, это поможет вам.
Было бы хорошо, если бы вы могли бы показать нам свой HTML. – adrianokw
Вы забыли «импортировать QuartzCore»? –