因为我要在mapview中的给定位置显示多个元素,所以当选择了给定的MKPinAnnotationView时,我想在MKMapView中显示WEPopoverController。
呈现内容,这是一个tableview工作到目前为止工作正常。我已经将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];
}
同样选择tableview单元格中的按钮可以找到并获得预期的响应(调用该方法并且popovercontroller保持在视图层次结构的顶部)。
我的问题是,当我点击WEPopoverController内容(其中一个表格视图单元格,位于中心,没有按钮所在的位置)时,点击事件会传递到地图视图,因此会隐藏弹出控制器。我该怎么办,以防止通过点击事件?
我尝试了几种解决方案,例如设置passThroughViews并操作WETouchableView中的hitTest:withEvent:方法并始终返回nil,但这对我没有任何帮助。
最佳NIC
修改
我现在已经调试了WETouchableView中的hitTest:withEvent:方法,而且看起来它总是返回一个UITableViewCellContentView的实例,我认为到目前为止应该是正确的。
修改
所以为了更清楚一点,我想显示一个弹出控制器,当它被点击时,它应该更新消失,就像它是通常的注释行为,也不应该调用底层视图。它应该保持在视图的顶部,并且tap事件应该被表视图捕获并调用特定的方法(tableView:didSelectRowAtIndexpath :)。
我也看过this解决方案,但它似乎不适用于我,并且底层视图(即地图视图)被调用。
答案 0 :(得分:0)
好的,对我有用的是添加一个透明背景颜色的UIButton作为表格视图单元格的第一个子视图。现在,单元格上的所有Tap事件都被UIButton捕获。顺便说一下,所有滑动事件都会被表视图捕获,所以至少可以正常工作。
说实话,这不是一个非常好的解决方案,但它对我有用。我真的很感激任何进一步的建议!
最佳NIC