我对编码很陌生(根本没有任何编程语言的背景)。我正在努力学习。我想创建一个简单的天气应用程序,一旦用户进入城市,就会在文本中显示天气信息。我从weather-forecast.com获取内容。我已经想出了如何加载Web内容,但我想只显示页面内容的片段(一个段落),而不是整个页面。有人可以告诉我该怎么做吗?
{
import UIKit
class ViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var cityText: UITextField!
@IBOutlet weak var webContent: UIWebView!
@IBAction func GoButtonPressed(sender: AnyObject) {
let url = NSURL (string: "http://www.weather-forecast.com");
let requestObj = NSURLRequest(URL: url!);
webContent.loadRequest(requestObj);
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
}
答案 0 :(得分:2)
这是一个简单视图控制器的示例,它只加载网站dribble.com的一部分。控制器具有选择DOM元素并仅显示该元素的方法。它非常简单,但功能强大,足以说明如何进一步开展此工作。
import UIKit
import JavaScriptCore
import WebKit
class TestViewController: UIViewController {
private weak var webView: WKWebView!
private var userContentController: WKUserContentController!
override func viewDidLoad() {
super.viewDidLoad()
createViews()
loadPage("https://dribbble.com/", partialContentQuerySelector: ".dribbbles.group")
}
private func createViews() {
userContentController = WKUserContentController()
let configuration = WKWebViewConfiguration()
configuration.userContentController = userContentController
let webView = WKWebView(frame: view.bounds, configuration: configuration)
webView.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addSubview(webView)
let views: [String: AnyObject] = ["webView": webView, "topLayoutGuide": topLayoutGuide]
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[topLayoutGuide][webView]|", options: .allZeros, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[topLayoutGuide][webView]|", options: .allZeros, metrics: nil, views: views))
self.webView = webView
}
private func loadPage(urlString: String, partialContentQuerySelector selector: String) {
userContentController.removeAllUserScripts()
let userScript = WKUserScript(source: scriptWithDOMSelector(selector),
injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,
forMainFrameOnly: true)
userContentController.addUserScript(userScript)
let url = NSURL(string: urlString)!
webView.loadRequest(NSURLRequest(URL: url))
}
private func scriptWithDOMSelector(selector: String) -> String {
let script =
"var selectedElement = document.querySelector('\(selector)');" +
"document.body.innerHTML = selectedElement.innerHTML;"
return script
}
}
上面示例中显示的视图控制器仅加载照片,运球网站内的设计部分。
答案 1 :(得分:0)
您无法轻松完成此操作 - UIWebView没有任何API可以显示正在加载的网页结构,也无法控制/允许部分加载页面。
也许您可以抓取页面的内容然后显示它,但是在将它加载到UIWebView之前你会这样做,并且在你刮掉它之后,网页视图可能不是最好的无论如何要显示它的方式。
进行一些搜索html和网页抓取以查看该术语的含义。
或者,如果您了解网页内容结构,则可以在UIWebView加载时将javascript注入页面,并且javascript将阻止显示页面的其他部分(但如果weather-forecast.com更改结构他们的html未来你的javascript可能不再有用了)
无论哪种方式,对于初学者来说,两者似乎都有点过于复杂,但除非你能快速掌握并且能够胜任,但需要学习很多东西。
答案 2 :(得分:0)
您可以从应用中安装天气API,而不是从网站获取数据。这样会更快,也可能更容易,因为使用大多数天气API,您可以选择显示哪些信息。
有关如何安装天气API的更多信息,请访问this网站。
希望我能解决您的问题,托比