現(xiàn)在iOS和html的混合開發(fā)是越來越普遍了困后,開發(fā)的效率也是大大的提高了鹉梨,但是頁面上的直接的交互也越來越重要了婴程。今天又朋友問我晋辆,自己就小研究了下渠脉。
1.OC與heml的交互現(xiàn)在還是使用UIWedView這個控件
1>OC中調(diào)用heml中的方法時使用到UIWedView的stringByEvaluatingJavaScriptFromString的方法
// 利用JS獲得當前網(wǎng)頁的標題
[self.wedview stringByEvaluatingJavaScriptFromString:@"document.title;"];
2>網(wǎng)頁上的操作讓OC界面發(fā)生的變化我們需要用到UIWedView的代理的方法
/* 攔截wedview的請求
*
* @param request 請求
*
* @return 返回yes時可以發(fā)送請求 返回NO就是不可以
*/
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
下面來介紹下怎么實現(xiàn)的(在storybord拖控件設(shè)置大小,托線就不介紹了)
1.我們應(yīng)該知道加載的那個網(wǎng)頁是吧瓶佳,我自己寫了個本地的網(wǎng)頁作為測試
// 加載網(wǎng)頁 本地網(wǎng)頁
[self.wedview loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]]];
// 設(shè)置代理
self.wedview.delegate = self;
2.實現(xiàn)代理
warning 注意系統(tǒng)的方法只能多穿兩個方法
/**
* 攔截wedview的請求
*
* @param request 請求
*
* @return 返回yes時可以發(fā)送請求 返回NO就是不可以
*/
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
// 獲取點擊按鈕上要獲取的發(fā)送的請求
NSString *URLString =[request.URL absoluteString];
// 判斷發(fā)送的請求是否包含下列特定的字符(應(yīng)為要用到交互芋膘,所以不是個正確的連接,這個和寫JS的約定好)
NSString *scheme = @"xmg://";
if ([URLString containsString:scheme]) {
// schem 后面的方法名字和參數(shù)截取下來
NSString *path =[URLString substringFromIndex:scheme.length];
// 將方法名字和參數(shù)利用特定的符號截取開來 這個用的是@“霸饲?“
NSArray *array =[path componentsSeparatedByString:@"?"];
// 獲取到方法名字
NSString *methodName = [array firstObject];
// 將方法名中的_特殊符號用OC語法中的:替換掉为朋,形成方法名
NSString *newmethodName = [methodName stringByReplacingOccurrencesOfString:@"_" withString:@":"];
// 獲取參數(shù)
NSArray *params = nil;
// 判斷下js發(fā)送的請求里面是否為有參數(shù)
if (array.count == 2) {
// 也是利用特殊的符號截取到參數(shù)的數(shù)組
params = [[array lastObject] componentsSeparatedByString:@"&"];
}
// 判斷是否有第二個參數(shù)
NSString *twoString = params.count<=1?nil:[params lastObject];
#warning 注意系統(tǒng)的方法只能多穿兩個方法 ,我也查詢了別人穿多個參數(shù)的方法厚脉,寫了方法习寸,后續(xù)上傳
// 調(diào)用方法
[self performSelector:NSSelectorFromString(newmethodName) withObject:[params firstObject] withObject:twoString];
#warning 注意 一定記得返回NO 不然就UIWedView就跳轉(zhuǎn)頁面了
return NO;
}
return YES;
}
3.注意 一定要在控制器中實現(xiàn)你要調(diào)用的方法,不然真的會崩潰的傻工。
- (void)sendMessage:(NSString *)number number2:(NSString *)number2{
NSLog(@" %@ %@ ", number, number2);
}
這個為自己寫的網(wǎng)頁內(nèi)容
3314D8C6-8CEB-42B6-88D0-8BC859754478.png