mam zamiar założyć, że to, co chcesz mieć jakiś opis lub tekst w niektórych umieść i pozwól, aby część tekstu była klikalna/klikalna i do tego chcesz użyć WKWebView
.
Rozwiązałem ten problem również za pomocą WKWebView
w jakiejś aplikacji, którą zrobiłem dawno temu, oczywiście jest kilka rozwiązań, to tylko jeden z nich, nic więcej.
Niektórzy ludzie mówią, że możesz użyć funkcji loadHTMLString
, aby załadować ciąg znaków HTML z serwera w JSON lub tak, jak chcesz, ale bardzo ważne jest, aby kod HTML był poprawnie sformatowany bez błędów.
Bardzo ważnym punktem o funkcji loadHTMLString
odnośnie Twojego komentarza ... Można by się spodziewać, że zazwyczaj aa szarym tle pojawia się po prasę link jak widać na obrazku poniżej, to nie stanie, jeśli HTML nie ma stylu CSS, ponieważ nie ma domyślnego stylu żadnego z <a><\a>
.
Zobaczmy więc następujący kod:
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)
}
}
W powyższym kodzie ustawić zmienną description
z jakiegoś tekstu z klikalne elementy wewnątrz niego i dodał dwóch metod delegata didStartProvisionalNavigation
i didFinishNavigation
pokazać networkActivityIndicatorVisible
w paski stanu, pokazujące pewien postęp w ładowaniu strony, gdy klikalny tekst jest klikany. Warto zauważyć, że w zmiennej htmlString
ustawiam kilka stylów, aby pokazać kolor i czcionkę <a>
. To zależy od Ciebie.
Dodałem też funkcję didFailProvisionalNavigation
pokazać alert w niektórych przypadkach adres URL jest nieprawidłowy czegoś podobnego nowego HTTPTransportSecurityLayer
dodanej jest iOS 9, aby umożliwić tylko https, w niektórych przypadkach można go używać do sprawdzania poprawności url i znać przyczynę błędu.
Wynik jest następujący tekst w normalnym UIViewController
:
I po dotknięciu dowolnego szary tekst url byłyby ładowane wewnątrz samego WKWebView
, oczywiście można dostosować to do Otwórz w wewnętrznej przeglądarce, którą wykonujesz lub coś innego, to zależy od Ciebie.
a następnie można zobaczyć wynik od razu, jeśli dotknij Jabłko:
Jeśli zamiast tego dotknij Developer Jabłko można zobaczyć wpisu w działaniu ponieważ http protokołu Wystąpił błąd w urządzeniu HTTPTransportSecurityLayer
w systemie iOS 9:
Mam gotowy projekt do przesłania na Github, jeśli go potrzebujesz. Mam nadzieję, że ci to pomoże.
Byłoby dobrze, gdyby można było pokazać nam swój html. – adrianokw
Czy zapomniałeś "importować QuartzCore"? –