项目要求:webview加载html网址,内容为填空题型文本,需要在横线上添加答案,并点击提交按钮后再将答案进行回显

正常加载的效果图片:

这个是用js交互后的效果图:

点击空格,输入想输入的答案,如a,b,效果图:

思路:要想实现直接点击题目文本的空格就能弹出键盘然后在横线上输入内容需要用到js交互;

实现的步骤:

一、实现点击插入答案;

直接加载接口中的文本:

webView = [[UIWebView alloc]initWithFrame:CGRectMake(, , widthAll, heightAll-)];
[self.view addSubview:webView];
NSString *textStr = @"每周末我都和妈妈出去吃饭?<BR>I ____ ____ for a meal with my mother every weekend?<BR>";
NSString *htmlStr =[self getHtmlString:textStr showStr:@""];
[webView loadHTMLString:htmlStr baseURL:nil];

其中,字符串中的的<BR>是换行符,webview加载时会自动识别并换行,补充:如果是用testview控件加载,则不会识别,所以还要提前用字符串替换的方法将<BR>替换成\n,空格符等也一样。

用js方法转换文本方法:

// 替换NSString为htmlString
-(NSString *)getHtmlString:(NSString *)str showStr:(NSString *)showStr
{
NSString *headStr = @"<html><head></head><body>";
NSString *footerStr = @"</body></html>";
NSString *inputStr = @"<input style=\"border-radius:0px;border:;border-bottom: solid black;background:;\" "; NSString *htmlStr = [[NSString alloc] init];
htmlStr = [htmlStr stringByAppendingString:headStr];
int count = -;
int flag = ; // 0上一个不是_ 1上一个是
for (NSInteger i = ; i < str.length; i ++) {
NSString *subStr = [str substringWithRange:NSMakeRange(i, )];
if ([subStr isEqualToString:@"_"] && flag == ) {
count ++;
subStr = [NSString stringWithFormat:@"%@id = \"%d\" > ",inputStr, count];
htmlStr = [htmlStr stringByAppendingString:subStr];
flag = ;
}else if([subStr isEqualToString:@"_"] && flag == ){
// flag = NO;
// htmlStr = [htmlStr stringByAppendingString:subStr];
}else {
htmlStr = [htmlStr stringByAppendingString:subStr];
flag = ;
}
}
NSString *jsStr = [NSString stringWithFormat:@"<script language=\"javascript\"> function transferData(){ var index = 0;var inputDatas = new Array();while(index<= %d ){var inputData = document.getElementById(index);inputDatas[index]=inputData.value;index++}; return JSON.stringify(inputDatas);}</script>", count];
htmlStr = [htmlStr stringByAppendingString:jsStr];
htmlStr = [htmlStr stringByAppendingString:footerStr]; return htmlStr;
}

当点击空格输入文字后,通过

 answerStr = [webview stringByEvaluatingJavaScriptFromString:@"transferData();"];//获取输入的答案

方法获取输入的答案,结构是json数组串,转换一下可以用一个全局的数组进行保存。

// 将JSON串转化为字典或者数组
- (NSArray *)stringToArray:(NSString *)jsonString{ NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil; NSArray *arr = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (arr != nil || error == nil){
return arr;
}else{
// 解析错误
return nil;
}
}

二、实现提交后的答案回显(即提交作答答案后显示答案);

添加webview的代理<UIWebViewDelegate>,在代理方法中将之前数组的值分别赋值到空格中:

#pragma mark-填空题
-(void)webViewDidFinishLoad:(UIWebView *)web
{
// NSLog(@"webview代理方法---");
NSLog(@"webview代理方法---打印保存值的全局数组array:%@",array);
for (int i = ; i<[array count]; i++) {
NSString *lJs =[NSString stringWithFormat:@"document.getElementById('%d').value='%@';",i,[array objectAtIndex:i]];
[htmlWeb stringByEvaluatingJavaScriptFromString:lJs];
}
 //提交答案后关闭交互,禁止再作答
htmlWeb.userInteractionEnabled = NO;
}

这样就实现输入以及回显两个功能了。

iOS webView与js交互在文本空格上输入文字的更多相关文章

  1. andriod/ios webview与js交互 html_demo

    <html> <head> <title>测试</title> </head> <body> <h3>Android ...

  2. webview与js交互(转)

    原文:http://www.cnblogs.com/vanezkw/archive/2012/07/02/2572799.html 对于android初学者应该都了解webView这个组件.之前我也是 ...

  3. js正则表达式限制文本框只能输入数字,小数点,英文字母

    1.文本框只能输入数字代码(小数点也不能输入)<input onkeyup="this.value=this.value.replace(/\D/g,'')" onafter ...

  4. JS 正则表达式 控制文本框只能输入中文、英文、数字与指定特殊符号

    JS 正则表达式 控制文本框只能输入中文.英文.数字与指定特殊符号(屏蔽表情输入) onkeyup:释放键盘事件 onpaste:粘贴事件 oncontextmenu :鼠标右击事件 只能输入中文: ...

  5. webView和js交互

    与 js 交互 OC 调用 JS // 执行 js - (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *title = [web ...

  6. webview与js交互

     对于android初学者应该都了解webView这个组件.之前我也是对其进行了一些简单的了解,但是在一个项目中不得不用webview的时候,发现了webview的强大之处,今天就分享一下使用we ...

  7. iOS webview注入JS

    - (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *js = @"function imgAutoFit() { \ ...

  8. [android] WebView与Js交互

    获取WebView对象 调用WebView对象的getSettings()方法,获取WebSettings对象 调用WebSettings对象的setJavaScriptEnabled()方法,设置j ...

  9. iOS之与JS交互通信

    随着苹果SDK的不断升级,越来越多的新特性增加了进来,本文主要讲述从iOS6至今,Native与JavaScript的交互方法 一.UIWebview && iframe && ...

随机推荐

  1. Codeforces 100548F - Color (组合数+容斥)

    题目链接:http://codeforces.com/gym/100548/attachments 有n个物品 m种颜色,要求你只用k种颜色,且相邻物品的颜色不能相同,问你有多少种方案. 从m种颜色选 ...

  2. PetaPoco T4模板修改生成实体

    PetaPoco T4 模板生成的实体类全部包含再一个.CS文件中.通过修改PetaPoco的T4模板,生成单文件实体. 1.生成单CS文件模板: SigleFile.ttinclude <#@ ...

  3. 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证--2.1使用Azure AD需要了解几个概念]

    2.1使用Azure AD需要了解几个概念 l Azure AD目录 当你注册 Microsoft 云服务时,便会获得一个 Azure AD 目录.你可根据需要创建更多的目录.例如,可以将第一个目录保 ...

  4. window.print打印指定div

    window.print可以打印网页,但有时候我们只希望打印特定控件或内容,怎么办呢? 首先我们可以把要打印的内容放在div中,然后用下面的代码进行打印. <html> <head& ...

  5. cmd命令。

    CMD按任意退出 echo 退出……按任意键pause & exit

  6. ie7下z-index失效问题解决方法(详细分析)

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-04-03) 点评:绝对定位元素的“有定位属性(relative或absolute)的父元素”在渲染层次时起到了主要作用,前面 ...

  7. nodejs以及npm的安装

    参考资料:http://xiaoyaojones.blog.163.com/blog/static/28370125201351501113581/ 上面的仁兄说的比较清楚,基本解决了安装中遇到的问题 ...

  8. 3DTouch-ShortcutItem - iOS9 - xcode7

    据说苹果某个神秘的团队闭门潜心研发多年的3DTouch终于,应用在iOS9上,且公开了API. 在系统主界面用力按压 APP 图标,如上会出现自定义菜单 有两种方法可以实现一.代码(这种方法也是可以动 ...

  9. Extjs datefield 日历控件中文显示

    原版的日历控件选择的时候是英文的,不是中文的.后来将在extjs包中src下locale下ext-lang-zh_CN.js引用进来就汉化了

  10. Eclipse设置选中高亮显示(包含debug)

    如果不高亮显示了:工具栏里有个黄色小笔的图标,点一下就可以了,或者alt+shift+O 设置高亮显示: