2

只是想知道是否有办法将 keyevents 或文本发送到 webview。

我有一个应用程序,用户可以单击一个按钮来执行特定任务。需要填充用户单击 webview 内的文本框的按钮。

我可以处理按钮单击事件和所有这些,但只是想知道我是否可以将该文本传递给 webview。

我在谷歌上搜索过,但还没有找到任何解决方案。也许我错过了一些东西。

无论如何提前谢谢。

4

2 回答 2

3

HTML 方面

假设以下是在您的 Objective-C 方法中调用它时触发的 javascript 方法..即,本机端。

<script type="text/javascript">

 var htmlTouch = 0;

//following is the function that you've assigned for a HTML button.

function button1_click()
{
htmlTouch =1; //The reason why i am setting the htmlTpuch=1,is just to identify whether it's native touch or HTML touch.
}

//javascrip function which we are going to call from oObjective-c
function toCallFromiOS() 
{

if( htmlTouch  == 1 ) 
{ 
alert("its a html touch,so pass any values to native code here.");
return 'urText';
}    

}  

//To reset the touch for next use.
function resetTheHTMLtouch() 
{
htmlTouch = 0;
}    

</script>

原生端

创建 UIWebview 来加载上面的 html(我现在在本地做)。

self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                pathForResource:@"test" ofType:@"html"] isDirectory:NO]]];

现在将手势委托添加到整个 webview。

UITapGestureRecognizer *tapGestureDown = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture)];
tapGestureDown.numberOfTapsRequired = 1;
tapGestureDown.delegate = self;
[self.webView addGestureRecognizer:tapGestureDown];

//handleTapGesture 是本机方法,在“检测是否是本机触摸时,您想要执行什么?”

-(void)handleTapGesture
{
NSLog(@"Touch is native");
}

现在我们都准备好了。下一步是实现调用的委托

-shouldRecognizeSimultaneouslyWithGestureRecognizer:==>which returns BOOL value.

在检测到 webview 上的触摸事件时,实现的委托函数被调用。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}

如果您像这样添加上面的代码,在点击 webview 时,上面的代理会被调用 N 次(有时是 8、9、13 等)。唯一的解决方案是我们应该能够知道触摸的状态(是否结束或开始),重置下一次通话的触摸事件。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
    NSString *javastr=[self.webView stringByEvaluatingJavaScriptFromString:@"toCallFromiOS();"];
    NSLog(@"This is return string from javascript==>%@",javastr);

     if((otherGestureRecognizer.state==UIGestureRecognizerStateEnded && [javastr hasPrefix:@"urText"]))
    {

    javastr= [self.webView stringByEvaluatingJavaScriptFromString:@"resetTheHTMLtouch();"];

    return NO;
    }

    return YES;

    }

如果javastr返回任何值(文本),则它是 HTML 触摸,否则它是原生触摸,“handleTapGesture”被调用。

更多详细信息请查看我的博客==>在 UIWebView 上感受 HTML 触摸和 Native 触摸的区别

希望这可以帮助你。快乐的编码......

于 2013-09-11T04:04:35.503 回答
0

所以我完全忘记了 iOS 我可以简单地使用 javascript。以防万一将来其他人也有同样的问题。我在这里找到了解决方案

http://iphoneincubator.com/blog/windows-views/how-to-inject-javascript-functions-into-a-uiwebview

这允许您将文本输入到 webview 的文本框和其他地方。

谢谢大家。

于 2013-09-11T02:18:47.770 回答