【问题标题】:how to show only pin(annotation) title in map view?如何在地图视图中仅显示图钉(注释)标题?
【发布时间】:2012-08-13 09:49:29
【问题描述】:

我有一个必须推入地图的表格视图。我正在尝试从注释中获取标题以显示在地图视图中,并且我需要比较字幕值中的值以完全根据注释值在地图中显示,但我得到的地图是标题和字幕值。 我不想显示字幕,但我希望它比较值 这是我的代码:

-(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];
}
}

我在这里做的是根据这个值比较类别值我需要在地图视图中显示具有相对颜色的图钉.. 有人知道怎么做吗?

【问题讨论】:

    标签: iphone objective-c ios5


    【解决方案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,改为设置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...
    }
    


    一个完全独立的问题是,您似乎正在使用按钮标签和自定义方法来处理标注按钮的按下。在自定义方法中,您可能试图获取被点击的注释的数据。我强烈不建议使用按钮标签或自定义方法。如需更好的选择,请参阅以下内容:

    【讨论】:

    • 非常感谢 Anna,但是使用这种方法我只能在 mapview 中获得一个 bluedot 类别图钉,但列表视图显示了其中三个 ....
    • 不,viewForAnnotation 是为每个注解单独调用的。只要该方法中的逻辑基于传入的特定注释,就可以了。如果仍然存在问题,您可以提出另一个问题并包含新代码。
    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多