viewController.png
一、需求:
ViewController中的某一部位嵌入一小方塊WebView,
比如WebView為廣告圖九宮格,點擊某一個廣告圖要跳轉到app中的相應某一個ViewController
二、驚喜
1、花了大半天查了很多資料,然后把思路帶偏了
2、一直以為要動用javascript
3、不用和javascript交互 不用和javascript交互 不用和javascript交互
4、不用特意 不用特意 不用特意 去獲得圖片的鏈接
三、原理:總共有二個關鍵點
關鍵點一 return false :
表示網頁內的點擊不響應,否則會在webview里面點擊前進
關鍵點二 return true : 原生控件響應且加載webView
所有代碼在此
//
// ViewController.swift
// WebViewDemo
//
// Created by apiapia on 9/7/17.
// Copyright ? 2017 WWW.ELINKNET.CN. All rights reserved.
//
import UIKit
class ViewController: UIViewController,UIWebViewDelegate{
let urlString = "https://api.xxxxyyyzzz.com/index.php?r=app/v1/site/get-home-m1"
lazy var webView:UIWebView = {
let webView = UIWebView.init()
webView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)
let url = URL(string: self.urlString)
webView.loadRequest(URLRequest(url: url!))
webView.delegate = self
return webView
}()
override func viewDidLoad() {
super.viewDidLoad()
automaticallyAdjustsScrollViewInsets = true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
view.addSubview(webView)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
extension ViewController {
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
let nextVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NextViewController") as! NextViewController
// nextVC.urlLabel.text = request.url?.absoluteString
if (request.url?.absoluteString.hasPrefix("https://api.xxxxyyyzzz.com/"))! {
navigationController?.pushViewController(nextVC, animated: true)
//MARK: - 關鍵點一: 表示網頁內的點擊不響應,否則會在webview里面點擊前進
return false
}
//MARK: - 關鍵點二: 原生控件響應且加載webView
return true
}
}
就這么簡單 easy!