(swift)我只要一个功能 --在uiwebview中的html按钮能够通过JS跳转到原生的Uiview中

第一步copy代码到你的uiwebview所在的viewcontrol中,

@objc protocol JavaScriptSwiftDelegate: JSExport {
    func chatWithExpert(dict: [String: AnyObject]);
}

@objc class JSObjCModel: NSObject, JavaScriptSwiftDelegate {
    weak var controller: UIViewController?
    weak var jsContext: JSContext?
    func chatWithExpert(dict: [String: AnyObject]){
        print(dict["imId"] as! String)
        let chatRoom : ChatController = ChatController(conversationChatter: dict["imId"] as! String, conversationType: EMConversationTypeChat)

        let user : IMUserEntity = IMUserEntity()
        user.nickName = dict["name"] as? String
        user.username = dict["imId"] as? String
        user.userPic = dict["image"] as? String
        IMUserManager.shareUserManager.updateUserInformationInBackground(user)

        chatRoom.hidesBottomBarWhenPushed = true
        dispatch_async(dispatch_get_main_queue()) { () -> Void in
            self.controller!.navigationController?.pushViewController(chatRoom, animated: true)
        }
    }
}

第二步 注入就是让两者关联起来

    self.jsContext =       webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as? JSContext
    let model = JSObjCModel()
    model.controller = self
    model.jsContext = self.jsContext
    // 这一步是将SwiftJavaScriptModel模型注入到JS中,在JS就可以通过WebViewJavascriptBridge调用我们暴露的方法了。
//        self.jsContext!.setObject(model, forKeyedSubscript: "SwiftWebViewBridge")

    // 这一步是将SwiftJavaScriptModel模型注入到JS中,在JS就可以通过WebViewJavascriptBridge调用我们暴露的方法了。
    self.jsContext.setObject(model, forKeyedSubscript: "SwiftWebViewBridge")

    self.jsContext!.exceptionHandler = { (context, exception) in
        print("exception:", exception)
    }```

第三步:可能出现的bug

我调入的坑:协议中方法的参数问题,如果是舞参数很ok,一个参数也还行,如果是两个即以上的建议使用字典。
chatWithExpert()
chatWithExpert(test:String)
chatWithExpert(dict: [String: AnyObject])
其他的自行研究吧
如果一定传两个,注意js中方法名和swif中语法名称的不一致性
大致是js:chatWithExpert(test:String,msg:String)
swift: chatWithExpert*Msg*(test:String,msg:String)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值