Because i have more than one element to display at a given location in a mapview, i'd like to display a WEPopoverController in the MKMapView when a given MKPinAnnotationView has been selected.
呈现内容,这是一个表格视图,到目前为止工作正常。我对 MKPinAnnotationView 进行了子类化,当单击注释视图时,我调用了我的自定义演示方法。
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
[view openCustomPopoverInFrame:self.view.frame];
[mapView deselectAnnotation:view.annotation animated:NO];
if (_lastAnnotationView != view) {
[_lastAnnotationView closeCustomPopover];
_lastAnnotationView = view;
}
}
- (void) openCustomPopoverInFrame:(CGRect) frame {
CGRect fromFrame = self.frame; //Pin Annotation View Frame
WEPopoverContentViewController *contentViewController = [[WEPopoverContentViewController alloc] initWithStyle:UITableViewStylePlain];
contentViewController.delegate = self;
WEPopoverController *viewController = [[WEPopoverController alloc] initWithContentViewController:contentViewController];
//[viewController setPassthroughViews:[NSArray arrayWithObjects:contentViewController.view, contentViewController.tableView, nil]];
viewController.delegate = self;
//set the displayed content
....
_myPopoverController = [viewController retain];
[viewController presentPopoverFromRect:fromFrame inView:self.superview permittedArrowDirections:UIPopoverArrowDirectionUp | UIPopoverArrowDirectionDown animated:YES];
[contentViewController release];
[viewController release];
}
在表格视图单元格中选择按钮也可以找到,我得到了预期的响应(该方法被调用并且 popovercontroller 保持在视图层次结构的顶部)。
我的问题是,当我单击 WEPopoverController 内容(表格视图单元格之一,在中心,没有按钮所在的位置)时,点击事件被传递到地图视图,因此隐藏了弹出控制器。我能做些什么来防止通过点击事件?
我尝试了几种解决方案,例如设置 passThroughViews 并在 WETouchableView 中操作 hitTest:withEvent: 方法并始终返回 nil,但这也对我没有任何帮助。
最好的网卡
编辑
我现在已经调试了 WETouchableView 中的 hitTest:withEvent: 方法,它似乎总是返回 UITableViewCellContentView 的一个实例,我认为到目前为止应该是正确的。
编辑
所以为了更清楚一点,我想显示一个弹出控制器,当它被点击时,它应该会消失,就像通常的注释行为一样,也不应该调用底层视图。它应该保持在视图的顶部,并且点击事件应该被表视图捕获并调用特定的方法(tableView:didSelectRowAtIndexpath:)。
我也看过这个解决方案,但它似乎对我不起作用,并且底层视图(即地图视图)被调用。