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 *st=@"0"; 
 NSString *str = [annotation subtitle];

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

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

    if ([str isEqualToString:st2]) {
        //pinView.pinColor = MKPinAnnotationColorPurple;
        pinView.image=[UIImage imageNamed:@"greendot.png"];
        //return pinView;
    }
    NSString *st3=@"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 stringWithFormat@"image_%d.png",i];

    ann.coordinate=region.center;

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

ここで行っているのは、この値に基づいてカテゴリ値を比較していることです。マップビューでピンを相対的な色で表示する必要があります。これを行う方法を知っている人はいますか?

4

1 に答える 1

1

この前の質問で説明したように:

タイトルメニューから注釈サブタイトルを非表示にするにはどうすればよいですか?

subtitleカテゴリを保存するには、空白のままにして、アノテーションクラスで別のカスタムプロパティを使用する必要があります。

そうsubtitleすれば、は(空白になるため)コールアウトに表示されませんが、注釈のカテゴリを取得して決定を下すことができます。


まず、アノテーションクラス.h(DisplayMap.h)に、次のプロパティを追加しますcategory

@property (nonatomic, copy) NSString *category;

次に、Display.mで、プロパティを合成します。

@synthesize category;

次に、generateAnnotations現在注釈を設定しているで、代わりsubtitleに設定し、空白のままにします(設定しないでください)categorysubtitle

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...
}


完全に別の問題は、ボタンタグとカスタムメソッドを使用してコールアウトボタンの押下を処理しているように見えることです。カスタムメソッドでは、タップされたアノテーションのデータを取得しようとしている可能性があります。ボタンタグやカスタムメソッドの使用は強くお勧めしません。はるかに優れた代替案については、以下を参照してください。

于 2012-08-13T12:58:56.220 に答える