美文网首页Swift&Objective-C
webView中的url链接调用ViewController原生

webView中的url链接调用ViewController原生

作者: 布袋的世界 | 来源:发表于2017-09-07 23:57 被阅读44次
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!

相关文章

网友评论

    本文标题:webView中的url链接调用ViewController原生

    本文链接:https://www.haomeiwen.com/subject/ldwwjxtx.html