Метка маркера route-me с UIButtonTypeDetailDisclosure-Button — кнопка не является кликабельной

У меня проблема с фреймворком route-me и метками маркеров. Я пытаюсь сейчас около 5 часов безуспешно и обыскал почти все темы форума в Интернете по этому поводу. Я хочу добавить метку маркера с кнопкой UIButtonTypeDetailDisclosure-Button. Когда я добавляю кнопку в UIView, которая должна быть меткой, я не могу нажать кнопку.

Мой код выглядит следующим образом:

- (void)tapOnMarker:(RMMarker*)marker onMap:(RMMapView*)map {
    UIView *frame = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    button.frame = CGRectMake(0, 0, 34, 34);
    button.enabled = YES;
    button.userInteractionEnabled = YES;
    [button addTarget:self action:@selector(markerLabelButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

    [frame addSubview:button];
    [marker setLabel:frame];
    [marker showLabel];
}

-(void)markerLabelButtonPressed:(id)sender {
    NSLog(@"pressed");
}

Я надеюсь, что кто-нибудь может помочь мне с этим. Спасибо :)

Мне нужна дополнительная информация, пожалуйста, дайте мне знать!


person E. Lüders    schedule 11.05.2011    source источник
comment
Я только что отправил запрос на это. github.com/route-me/route-me/pull/161   -  person Davide Guerri    schedule 28.01.2012
comment
Я пытаюсь внедрить тонкие элементы в свой проект, какому делегату вы должны соответствовать, чтобы использовать метод ontapmarker?   -  person Mark Gilchrist    schedule 08.11.2013


Ответы (4)


Хорошо, наконец, мне удалось решить проблему. Может быть, это немного грязный обходной путь, но в любом случае он работает;)

Я изменил структуру route-me и добавил метод с именем

- (void) tapOnLabelForMarker: (RMMarker*) marker onMap: (RMMapView*) map onLayer:(CALayer *)layer;

В RMMapView.m я добавил следующие строки в строку 584:

 else if ([superlayer superlayer] != nil && [[[superlayer superlayer] superlayer] isKindOfClass: [RMMarker class]]) {
     if (_delegateHasTapOnLabelForMarker) {
         [delegate tapOnLabelForMarker:(RMMarker*)[[superlayer superlayer] superlayer] onMap:self onLayer:superlayer];
     }
 } 

Теперь, когда нажимается кнопка раскрытия, эта часть кода выполняется, и вызывается мой метод. При касании любой другой области метки маркера

- (void) tapOnLabelForMarker: (RMMarker*) marker onMap: (RMMapView*) map;

метод называется.

Надеюсь, это поможет кому-то еще ;)

person E. Lüders    schedule 26.06.2011

Эта проблема решается с помощью этого запроса на вытягивание https://github.com/route-me/route-me/pull/161.

Он был объединен с кодом route-me 21 февраля 2012 года.

person Davide Guerri    schedule 23.02.2012

Взгляните на эту тему в списке групп маршрутов Google: http://groups.google.com/group/route-me-map/browse_thread/thread/343cb3ebfd9480e3

кому-то ответили с некоторым кодом для меток маркера «воздушный шар», который использует кнопку закрытия.

person EricSonaron    schedule 11.05.2011
comment
Спасибо за ваш ответ, я попробовал код для создания своего маркера, но моя кнопка «Раскрытие» по-прежнему не активна. --- Любые другие идеи? - person E. Lüders; 12.05.2011

У меня были проблемы с этим решением, и я не хочу быть одним из тех людей, которые говорят вам делать это по-другому, потому что у вас могут быть веские причины делать что-то так, как вы это делаете.

Я выбрал этот первоначальный подход, а затем с помощью другого потока я понял: если я хочу иметь только одну выноску за раз, я могу просто управлять им как подвидом mapView и использовать вспомогательные методы mapView.markerManager. Объект RMMarker имеет указатель данных, который можно использовать для заполнения содержимого всплывающей подсказки.

Это сэкономило мне много времени, и у меня есть удовлетворительное решение, которое совсем не загрязняется.

person horseshoe7    schedule 12.07.2011