2013-04-17 4 views
1

Поскольку у меня есть более одного элемента для отображения в определенном месте в mapview, я бы хотел отобразить WEPopoverController в MKMapView, когда выбран данный MKPinAnnotationView.iOS: WEPopoverController в MKMapView

Представление содержания, которое является табличным обзором, прекрасно работает до сих пор. Я подклассифицировал 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 (одна из ячейки таблицы просмотра, в центре, где не находится ни одной кнопки), событие перехода проходит через представление карты и, следовательно, скрывает контроллер popover , Что я могу сделать, чтобы предотвратить пройденные события крана?

Я попробовал несколько решений, например. установить passThroughViews, а также манипулировать методом hitTest: withEvent: в WETouchableView и всегда возвращать нуль, но это также не помогает мне дальше.

Лучшие Nic

EDIT

Я теперь отладил Трассировка: withEvent: метод в WETouchableView немного больше в отдел, и кажется, что она всегда возвращает экземпляр UITableViewCellContentView, который, я думаю, должен быть правильным до сих пор.

EDIT

Так, чтобы быть немного более ясными, я хочу, чтобы отобразить контроллер поповера и когда он получает похлопали он должен neighter исчезнуть, как это обычное поведение аннотации, ни основной вид должен вызываться , Он должен оставаться на вершине представления, и событие перехода должно попасть в представление таблицы и вызвать конкретный метод (tableView: didSelectRowAtIndexpath :).

Я также рассмотрел решение this, но, похоже, оно не работает для меня, и открывается основной вид (который является видом карты).

ответ

0

Хорошо, что сработало для меня, заключалось в том, чтобы добавить UIButton с прозрачным цветом фона в качестве первого подматрица ячейки представления таблицы. Все события Tap в ячейке теперь попадают в UIButton. Btw все события салфетки попадают в таблицу, поэтому, по крайней мере, это работает нормально.

Если честно, это не очень хорошее решение, но оно работает для меня. Я бы очень признателен за любые дальнейшие предложения!

Nic

Смежные вопросы