2013-08-05 111 views
3

我正在使用下面的代碼在mapView中添加按鈕,但按鈕單擊事件僅適用於左側大小,它不適用於右側。單擊事件在地圖視圖中無法正常工作

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

你想要達到什麼樣的功能和UI?爲什麼代碼創建MKPinAnnotationView,然後將圖像設置爲空白(而不是創建普通的MKAnnotationView並設置其圖像)?這裏工作的「左邊部分」究竟是什麼?爲什麼將infoButton設置爲rightCalloutAccessoryView _and_作爲子視圖添加到註釋視圖本身?什麼在這裏被認爲是「正確的部分」呢?點擊註釋時是否會彈出標註?順便說一下,當視圖被重用時,代碼再次(再次)向視圖添加infoButton。 – Anna

+0

@AnnaKarenina:我的按鈕寬度爲40,所以左邊部分包含0 yo 20,右邊部分包含21至40.我試圖設置星形圖像而不是針形圖像。在我的代碼中,pinAnnotation.image用於空白圖像。 –

+0

嘗試設置註釋視圖本身的框架(pinAnnotation.frame),使其至少與按鈕框一樣大。針視圖的默認框架寬度小於40.同時考慮改進代碼的其他註釋。 – Anna

回答