2013-08-05 2 views
3

Я использую код ниже для добавления кнопки в mapView, но событие нажатия кнопки работает только в левом размере, но не работает с правой стороны.Событие Click не работает должным образом в окне карты

MKPinAnnotationView *pinAnnotation = nil; 
if(annotation != beerMapView.userLocation) 
{ 
    static NSString *defaultPinID = @"myPin"; 
    pinAnnotation.pinColor = MKPinAnnotationColorRed; 
    pinAnnotation = (MKPinAnnotationView *)[beerMapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
    if (pinAnnotation == nil) 
     pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease]; 
    NSLog(@"PinAnnotation: %@",NSStringFromCGRect(pinAnnotation.frame)); 
    pinAnnotation.canShowCallout = YES; 
    pinAnnotation.image = [UIImage imageNamed:@""]; //Set blank pin image 

    UIImageView *pinImage = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 40, 40)]; 
    pinImage.image = [UIImage imageNamed:@"ic_pin.png"]; 

    UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [infoButton setImage:[UIImage imageNamed:@"ic_pin.png"] forState:UIControlStateNormal]; 
    infoButton.frame = CGRectMake(0, 0, 40, 40); 
    pinAnnotation.rightCalloutAccessoryView = infoButton; 
    [infoButton addTarget:self action:@selector(detailBtnClk:) forControlEvents:UIControlEventTouchUpInside]; 
    [pinAnnotation addSubview:infoButton]; 
} 

infoButton -> левая часть (от 0 до 20). (Call detailBtnClk)
infoButton -> правая часть (от 21 до 40) событие нажатия кнопки не работает. (Нельзя назвать detailBtnClk)

Любая помощь приветствуется.

+0

Какую функциональность и пользовательский интерфейс вы пытаетесь достичь точно? Почему код создает MKPinAnnotationView, а затем устанавливает изображение в пустую (вместо создания простого MKAnnotationView и установки его образа)? Что такое «левая часть» здесь, которая работает? Почему InfoButton установлен как rightCalloutAccessoryView _and_, добавленный в качестве представления в представлении аннотации? Что здесь считается «правой частью»? Вызывается ли выноска при прослушивании аннотации? Кстати, когда представления повторно используются, код снова добавляет infoButton в представление (и снова). – Anna

+0

@AnnaKarenina: Моя кнопка шириной 40, так что левая часть содержит 0 лет 20, а правая часть содержит от 21 до 40. Я пытаюсь установить звездное изображение вместо пин-изображения. В моем коде pinAnnotation.image для пустого пин-изображения. –

+0

Попробуйте установить рамку самого аннотационного представления (pinAnnotation.frame), чтобы она была как минимум такой же, как рамка кнопки. Ширина рамки по умолчанию для представления контактов меньше 40. Также рассмотрите другие комментарии для улучшения кода. – Anna

ответ

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