2012-08-13 90 views
1

我有一個表視圖,必須推入地圖。我試圖從註解中獲得標題以顯示在地圖視圖中,並且我需要比較來自字幕值的值以完全基於註解值顯示在地圖中,但是我在地圖中獲取的是標題和字幕值。 我不想顯示字幕,但我希望它比較值 這裏是我的代碼:如何在地圖視圖中僅顯示引腳(註釋)標題?

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation: 
(id <MKAnnotation>)annotation { 
MKAnnotationView *pinView = nil; 
if(annotation != mapview.userLocation) 
{ 
    NSLog(@"%i",k); 

    static NSString *defaultPinID = @"defaultPinID"; 
    pinView = (MKAnnotationView *)[mapview dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
    if (pinView == nil) pinView = [[[MKAnnotationView alloc] 
             initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease]; 



    NSString *[email protected]"0"; 
NSString *str = [annotation subtitle]; 

    if ([str isEqualToString:st]) { 
     //pinView.pinColor = MKPinAnnotationColorGreen; 
     pinView.image=[UIImage imageNamed:@"greyDot.png"]; 
     //return pinView; 
    }  
    NSString *[email protected]"10"; 

    if ([str isEqualToString:st1]) { 
     //pinView.pinColor = MKPinAnnotationColorGreen; 
     pinView.image=[UIImage imageNamed:@"blackDot.png"]; 
     //return pinView; 
    } 
    NSString *[email protected]"20"; 

    if ([str isEqualToString:st2]) { 
     //pinView.pinColor = MKPinAnnotationColorPurple; 
     pinView.image=[UIImage imageNamed:@"greendot.png"]; 
     //return pinView; 
    } 
    NSString *[email protected]"30"; 

    if ([str isEqualToString:st3]) { 
     //pinView.pinColor = MKPinAnnotationColorRed; 
     pinView.image=[UIImage imageNamed:@"blueDot.png"]; 
     //return pinView; 
    } 


    pinView.canShowCallout = YES; 

    infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    //Display *t=annotation; 
    infoButton.tag=k; 
    [infoButton addTarget:self action:@selector(pinLabelClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    pinView.rightCalloutAccessoryView = infoButton; 

} 

else { 
    [mapview.userLocation setTitle:@"I am here"]; 
} 

return pinView; 
//k++; 

} 

這是我的代碼生成的註釋

- (void)generateAnnotations 
{ 
[mapview setMapType:MKMapTypeStandard]; 
[mapview setZoomEnabled:YES]; 
[mapview setScrollEnabled:YES]; 
[mapview setDelegate:self]; 


for(int i=0;i<[addressArray count];i++){ 
    AddressInfo *address = [addressArray objectAtIndex:i]; 
    MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } }; 
    region.center.latitude = [address.latitude floatValue]; 
    region.center.longitude = [address.longitude floatValue]; 
    region.span.latitudeDelta=10.01f; 
    region.span.longitudeDelta=10.01f; 
    [mapview setRegion:region animated:YES]; 
    //[mapview setRegion:region animated:TRUE]; 
    //[mapview regionThatFits:region];  
    DisplayMap *ann = [[DisplayMap alloc] init]; 
    //ann.tt=i; 
    k=i; 
     ann.title = address.name; 
    ann.subtitle = [NSString stringWithFormat:@"%@",address.category]; 

    ann.sa = address.streetaddress; 
    ann.sb = address.suburb; 
    ann.ph = address.phoneNo; 
    ann.index = i; 
    //ann.image = [NSString stringWi[email protected]"image_%d.png",i]; 

    ann.coordinate=region.center; 

    [mapview addAnnotation:ann]; 
    [ann release]; 
} 
} 

什麼,我在這裏做什麼是我比較基於這個值的類別值我需要在相對顏色的地圖視圖中顯示引腳.. 任何人有想法如何做到這一點?

回答

1

在本前面的問題解釋說:

how to make the annotation subtitle disappear from title menu?

你需要離開subtitle空白,並使用單獨的自定義屬性在註釋類來存儲您的類別。

這樣,subtitle將不會顯示在標註中(因爲它將是空白的),但您仍然可以獲取註釋的類別來做出決定。


首先,在你的註釋類.H(這將是DisplayMap.h),增加對category屬性:

@property (nonatomic, copy) NSString *category; 

接下來,在Display.m,合成屬性:

@synthesize category; 

接下來,在generateAnnotations,在那裏你當前設置的註釋的subtitle,設置category而不是和離開subtitle空白(不設置)

ann.category = [NSString stringWithFormat:@"%@",address.category]; 


最後,在viewForAnnotation,您可以檢查註釋的category。爲此,首先檢查註釋類型是DisplayMap,然後進行轉換。

所以更換這一部分:

NSString *str = [annotation subtitle]; 
//code that sets pinView.image based on value of str... 

與此:

pinView.image = set_to_some_default_image; 

if ([annotation isKindOfClass:[DisplayMap class]]) 
{ 
    DisplayMap *dmAnn = (DisplayMap *)annotation; 
    NSString *str = dmAnn.category; 

    //code that sets pinView.image based on value of str... 
} 


一個完全獨立的問題是,它看起來像您使用的是按鈕標籤和一個自定義的方法來處理標註按鈕按下。在自定義方法中,您可能試圖獲取被點擊的註釋的數據。我強烈建議不要使用按鈕標籤或自定義方法。爲了更好的替代品,請參閱以下內容:

+0

非常感謝安娜,但使用這種方法我想就能得到的只有一個藍點類別針在圖形頁面,但名單視圖顯示其中三個.... – khadar 2012-08-14 08:14:22

+1

不,對每個註釋單獨調用viewForAnnotation。只要該方法中的邏輯基於傳入的特定註釋,就應該沒問題。如果還存在問題,您可以提出其他問題並添加新的代碼。 – Anna 2012-08-14 13:15:39

相關問題