在所需的交互视图.m文件中写如下类似的协议,在.m的@interface遵守这个协议名并且实现如下方法,
@protocol ZKKInteractionWithDelegate<JSExport>
-(void)toTheMinimum;
-(void)toTheMaximum;
-(void)closeWebView;
-(void)toAlert:(NSString*)msg;
@end
在.m文件implement中分别实现方法,文章中的几个方法分别是隐藏、展示、关闭WebView 和在WebView上进行弹框操作。具体什么时候该调用iOS的不用理会,这里只是为了h5可以控制我们的webView和弹框,所以逻辑是由h5实现。
- (void)toTheMaximum{
// self.webView.frame = CGRectMake(0, -22, pingmuwidth, pingmuheight+22);
self.webView.hidden = NO;
NSLog(@"toTheMaximum");
dispatch_async(dispatch_get_main_queue(), ^{
[self.chatView.textField resignFirstResponder];
});
}
- (void)toTheMinimum{
// self.webView.frame = CGRectMake(0, 0, 1, 1);
self.webView.hidden = YES;
NSLog(@"toTheMaximum");
}
- (void)closeWebView{
[self.webView removeFromSuperview];
NSLog(@"closeWebView");
}
-(void)toAlert:(NSString*)msg{
NSLog(@"toAlert:(NSString*)msg : %@",msg);
UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"温馨提醒" message:msg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[self.webView addSubview:alert];
[alert show];
}
//实现UIWebViewDelegate,在.m文件中写如下方法识别js方法名,这个需要js和iOS的人达成一致类名,方法名,如
类名:InteractionWithJS
方法名:
ToTheMaximum
ToTheMinimum
closeWebView
toAlert(msg)
js调用webView的方法
-(void)webViewDidFinishLoad:(UIWebView *)webView{
self.context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
self.context[@"InteractionWithJS"] = self;
//JS调用无参数OC
// [self.view endEditing:YES];
// [self.chatView.textField resignFirstResponder];
[self.context setExceptionHandler:^(JSContext *ctx, JSValue *value) {
NSLog(@"--error:-- %@", value);
}];
// self.context[@"InteractionWithJS"] = self.webView;
}
- 即可完成
网友评论