1

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:)。

我也看过这个解决方案,但它似乎对我不起作用,并且底层视图(即地图视图)被调用。

4

1 回答 1

0

好的,对我有用的是添加一个具有透明背景颜色的 UIButton 作为表格视图单元格的第一个子视图。现在,单元格上的所有点击事件都被 UIButton 捕获。顺便说一句,所有滑动事件都会被表格视图捕获,所以至少可以正常工作。

老实说,这不是一个很好的解决方案,但它对我有用。我真的很感激任何进一步的建议!

最好的网卡

于 2013-04-17T14:02:44.240 回答