我创建了 UIWebView 的子类,并在其顶部添加了一个 UIView,以便捕获触摸事件并使用它们。
现在,由于在 UIWebView 顶部添加了额外的 View ,文本选择根本不起作用。当我删除额外的 UIView 时,文本会被选中,但我无法识别事件。
有没有办法让这两种功能共存?
[编辑]
可能是我的帖子不够清楚。当我子类化 UIWebView 来处理事件时,选择停止工作。我无法再选择要复制的文本。有什么想法吗?
最佳答案
“UIWebView 类不应被子类化。” - 来自 Apple's UIWebView
docs .
听起来您正试图扰乱人们与网页的交互方式,这可能会让您被应用商店拒绝。 (对于许多可能的拒绝原因,请查看 app rejected 。)
如果您不担心这一点,这里有一些建议可能会帮助您实现目标:
- 如果您想控制用户可以通过超链接访问或不能访问的位置,或者只是在用户单击某些链接时执行一些代码,您可以通过
webView:shouldStartLoadWithRequest:navigationType:
添加一个钩子(Hook)。UIWebViewDelegate
的方法协议(protocol)。非常方便。 - 如果您想对页面的行为或外观进行一些简单的修改,您实际上可以通过调用
stringByEvaluatingJavaScriptFromString:
在页面中执行您自己的 javascript ,UIWebView
的方法本身。只需将您的 JavaScript 作为字符串传递即可。
而且,如果这没有给你想要的(在这种情况下,你真的会勾掉他们的应用商店评论人员),那么你可能可以做你已经在做的事情,然后传播所有这些UITouch
直接进入 UIWebView
本身。像这样的例子(在重叠的 UIView
中):
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[self doWhatever];
[underlappingWebView touchesMoved:touches withEvent:event];
}
这样你就可以鱼与熊掌兼得(获取用户触摸信息)并吃掉它(让网页像平常一样运行)。
关于iphone - UIWebView 事件并按住以选择/复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1258771/