我们在写程序的时候有时候避免不了要加载web页面,当然也避免不了要与web进行交互了,有时候一个比较好看规整的界面
我们iOS 在前端要花很大一会要摆控件,要适配,要赋值等操作,但是加载别人写好的web页面速度快,效率高,界面好,
但是就必须交互,如果交互性很强的地方用原生的比较好
简单的谈谈我用到的js交互
我们的控制器加载UIWebView之后,交互中这个方法很重要
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
1.js向iOS传值
我在这个方法里面先截取url
NSString *requestString = [[requestURL] absoluteString];
NSArray *components = [requestStringcomponentsSeparatedByString:@":"];
我可爱的后台人员给我们这样的方法
gozhusu这个就是方法名,加号后面的一串都是参数,也就是说现在可爱的后台人员要给我传值,那么我在iOS里面怎么接收呢
我现在截取到url同时根据@":"截取url字符串放进数组里面
结果如下:
现在,我就要获取后台给我的值,如下
if ([componentscount] > 1 && [(NSString *)[componentsobjectAtIndex:0]isEqualToString:@"gozhusu"]) {
if([(NSString *)[componentsobjectAtIndex:1]isEqualToString:@"arg"])
{
NSString *parma = [[NSStringalloc]initWithString:[componentsobjectAtIndex:2]];
NSArray *array = [parma componentsSeparatedByString:@","];
PatientInfoVC *patientInfo = [[PatientInfoVCalloc]init];
NSString *nam = [ array[2]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *sex = [array[1]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
patientInfo.sex= sex;
patientInfo.name = nam;
patientInfo.appointid = array[0];
[self.navigationControllerpushViewController:patientInfo animated:YES];
}
return NO;
}
2.ios 向js传值,相同的道理stringByEvaluatingJavaScriptFromString是非常有用的if ([componentscount] > 1 && [(NSString *)[componentsobjectAtIndex:0]isEqualToString:@"getauthid"]) {
if([(NSString *)[componentsobjectAtIndex:1]isEqualToString:@"arg"])
{
if (hosiptalArr) {
[webView stringByEvaluatingJavaScriptFromString:[NSStringstringWithFormat:@"authid('%@');",[UserConfiggetInstance].authorityId]];
}
}
return NO;
}
我将[UserConfig getInstance].authorityId]这个值通过authid方法就传给js了