我有一个显示生成的html表的UIWebView.当用户点击html表格中的单元格时,我的应用程序需要知道他们点击了哪个单元格,以及点按位置的(x,y)坐标,以便我可以在该点显示弹出窗口.
我在UIWebView委托中实现了shouldStartLoadWithRequest.在我的网页中,我嵌入了捕获触摸事件的javascript代码,并传递了URL请求中触摸点的(x,y)坐标,如下所示:
var x, y;
function init()
{
// Add an event listener for touch events - set x and y to the coordinate of the touch point
document.addEventListener('touchstart', function(event) {
x = event.touches[0].clientX;
y = event.touches[0].clientY;
}, false);
}
function cellTapped(event)
{
window.location.href="file://myapp/dostuff?x=" + x + "&y=" + y;
}
Run Code Online (Sandbox Code Playgroud)
在我的html表中,每个单元格都会获得一个调用cellTapped()的onclick事件:
<td onclick="cellTapped(event)">...</td>
Run Code Online (Sandbox Code Playgroud)
因此,每当用户触摸UIWebView中的任何位置时,我都会获得触摸点的坐标,我将其保存在x和y中.如果他们触摸其中一个表格单元格,我会收到触摸事件(设置x和y),然后调用cellTapped()并设置window.location.href,将(x,y)坐标传递到我的应用程序中.
这一切都很美妙.除非用户缩放或滚动UIWebView.当他们缩放或滚动时,我从event.touches [0] .clientX和event.touches [0] .clientY获得的x和y坐标被一些不同数量的像素关闭(随着缩放量和如何变化而变化)向上/向下或向左/向右滚动Web视图).
有没有办法确定网页视图的缩放比例和滚动位置,以便我可以相应地调整我的x和y坐标?来自UIScrollView 的zoomScale和contentOffset属性似乎没有在UIWebView中公开.
编辑:在iOS 5及更高版本中,UIWebView的scrollView属性是公开且可访问的,因此这不再是问题。就我而言,我仍然需要支持运行 iOS 4 的设备(不管你信不信……),因此以下内容解决了旧版本的问题。
通过循环遍历 my 的子视图UIWebView,我可以找到底层的UIScrollView,然后使用它的zoomScale和contentOffset属性来查找缩放和滚动位置:
for (UIView *view in myWebView.subviews)
{
if ([view isKindOfClass:[UIScrollView class]])
{
// Get UIScrollView object
scrollview = (UIScrollView *) view;
// Find the zoom and scroll offsets
float zoom = scrollView.zoomScale;
float xOffset = scrollView.contentOffset.x;
float yOffset = scrollView.contentOffset.y;
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道苹果是否会批准应用程序商店提交,因为我认为他们有不公开底层UIScrollView对象的原因,但它确实解决了我的问题。无论如何,我的应用程序都是根据企业许可证分发的,因此应用程序商店提交对我来说不是问题。
| 归档时间: |
|
| 查看次数: |
3024 次 |
| 最近记录: |