项目要求: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. 第二次作业----自学c++的选择与计划

    1.选择慕课网进行学习的原因 由于本来寒假是打算学习java的(如上篇随笔所言),所以向之前已经自学的同学问如何找教学视频,他就向我推荐了慕课网,在看了几集java的教学视频之后觉得慕课网挺好用的,所 ...

  2. GWT工程架构分析与理解

    上一篇文章中介绍了GWT技术的一些理论性的东西,涉及到GWT得一些技术原理及实现.接下来笔者将通过创建一个GWT工程去理解分析GWT工程架构.     GWT工程架构解析 笔者使用的是Eclipse插 ...

  3. POJ3321 Apple Tree (树状数组)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16180   Accepted: 4836 Descr ...

  4. newlsip 检查磁盘分区使用情况

    主要还是用df -k这个命令,然后将输出结果全部逐行解析,最后调用REST API,发送给服务器保存. 参考代码: #!/usr/bin/newlisp (set 'cur-path "/o ...

  5. hdoj 5417 Victor and Machine

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5417 水题,一开始题目读错了做了好久,每次停工以后都是重新计时. 需要注意的是,先除后乘注意加括号 # ...

  6. ELF学习--装载过程

    当我们在linux bash下执行ELF程序时,Linux系统是怎样装载和执行的呢? 1.bash进程fork出子进程 2.在bash的子进程中调用execve系统调用来执行指定的ELF. 3.exe ...

  7. Spring REST实践之Error Handling

    Error Responses 在REST API中,HTTP状态码有非常重要的作用.API开发者应该坚持为每一个请求返回一个正确合适的状态码,而且应该在响应body中包含有用的.细粒度的错误信息.这 ...

  8. C:内存分配、内存中五大区

     1.内存的划分  (从高到低依次是: 栈区 . 堆区 .全局静态区 . 常量区 . 代码区 )栈区是系统自动回收,堆区是我们手动回收  2. 栈区   在函数内部定义的局部变量和数组.都存放在栈区, ...

  9. (剑指Offer)面试题32:从1到n整数中1出现的次数

    题目: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,一共出现了5次. 思路: 1.累加法 累加1到n中每个整数 ...

  10. Oracle用户、权限、角色管理

    Oracle 权限设置一.权限分类:系统权限:系统规定用户使用数据库的权限.(系统权限是对用户而言). 实体权限:某种权限用户对其它用户的表或视图的存取权限.(是针对表或视图而言的).   二.系统权 ...