0

我已经把头撞在墙上一段时间了,但它就这样了。我正在使用 PhoneGap 构建应用程序。底部有一个标签栏,有 5 个标签,一个标签加载 Google 地图(来自 GitHub 的旧插件的 MapKit),但问题是当您在地图标签后立即切换到另一个标签时,新标签会不接受触摸事件,就好像地图还在那里一样。(地图不可见,方法如下:

self.mapView.hidden = YES;
self.childView.hidden = YES;

但如果你这样做:地图选项卡 -> 主页选项卡 -> 通知选项卡然后触摸事件在通知选项卡上工作。

我认为解决这个问题的方法是以某种方式将 PhoneGap 使用的 UIWebview 带到前面。

我试过了:

[self.childView bringSubviewToFront:self.webView];

和:

[self.webView bringSubviewToFront:self.mapView];

并且:

[self.viewController bringSubviewToFront:self.webView]

最后一行代码给出了这个错误:“UIViewController”可能不会响应“bringSubviewToFront:”并且什么也没有发生。

这是用于绘制地图的代码:

if (!self.mapView) 
{
    [self createView];
}

// defaults
CGFloat height = 480.0f;
CGFloat offsetTop = 0.0f;

if ([options objectForKey:@"height"]) 
{
    height=[[options objectForKey:@"height"] floatValue];
}
if ([options objectForKey:@"offsetTop"]) 
{
    offsetTop=[[options objectForKey:@"offsetTop"] floatValue];
}
if ([options objectForKey:@"buttonCallback"]) 
{
    self.buttonCallback=[[options objectForKey:@"buttonCallback"] description];
}

if ([options objectForKey:@"regionDidChangeCallback"]) 
{
    self.regionDidChangeCallback=[[options objectForKey:@"regionDidChangeCallback"] description];
}

CLLocationCoordinate2D centerCoord = { [[options objectForKey:@"lat"] floatValue] , [[options objectForKey:@"lon"] floatValue] };
CLLocationDistance diameter = [[options objectForKey:@"diameter"] floatValue];

CGRect webViewBounds = self.webView.bounds;

CGRect mapBounds;
mapBounds = CGRectMake(
                       webViewBounds.origin.x,
                       webViewBounds.origin.y + (offsetTop / 2),
                       webViewBounds.size.width,
                       webViewBounds.origin.y + height
                       );

[self.childView setFrame:mapBounds];
[self.mapView setFrame:mapBounds];

MKCoordinateRegion region=[ self.mapView regionThatFits: MKCoordinateRegionMakeWithDistance(centerCoord, 
                                                                                            diameter*(height / webViewBounds.size.width), 
                                                                                            diameter*(height / webViewBounds.size.width))];
[self.mapView setRegion:region animated:YES];

任何帮助将不胜感激。

4

1 回答 1

1

您不能在 viewController 对象上调用方法 bringSubviewToFront:,因为 UIViewController 不会对此做出响应。您可以按如下方式进行更改,

错误的 :

[self.viewController bringSubviewToFront:self.webView];

对 :

[self.viewController.view bringSubviewToFront:self.webView];

我认为这可能对你有用。

于 2012-06-27T06:25:23.723 回答