Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在地图视图中仅显示pin(注释)标题?_Iphone_Objective C_Ios5 - Fatal编程技术网

Iphone 如何在地图视图中仅显示pin(注释)标题?

Iphone 如何在地图视图中仅显示pin(注释)标题?,iphone,objective-c,ios5,Iphone,Objective C,Ios5,我有一个表视图,必须推入地图。我正试图从注释中获取标题以显示在地图视图中,我需要根据注释值比较subtitle value中的值以显示在地图中,但我在地图中得到的是标题和subtitle值。 我不想显示字幕,但我想让它比较数值 这是我的密码: -(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation: (id <MKAnnotation>)annotation { MKAnnotationView *pinView

我有一个表视图,必须推入地图。我正试图从注释中获取标题以显示在地图视图中,我需要根据注释值比较subtitle value中的值以显示在地图中,但我在地图中得到的是标题和subtitle值。 我不想显示字幕,但我想让它比较数值 这是我的密码:

-(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++;

}
-(MKAnnotationView*)地图视图:(MKMapView*)mV视图用于注释:
(id)注释{
MKAnnotationView*pinView=nil;
if(注释!=mapview.userLocation)
{
NSLog(@“%i”,k);
静态NSString*defaultPinID=@“defaultPinID”;
pinView=(MKAnnotationView*)[mapview dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
如果(pinView==nil)pinView=[[[MKAnnotationView alloc]
initWithAnnotation:annotation重用标识符:defaultPinID]autorelease];
NSString*st=@“0”;
NSString*str=[注释字幕];
if([str isEqualToString:st]){
//pinView.pinColor=MKPinAnnotationColorGreen;
image=[UIImage ImageName:@“greyDot.png”];
//返回pinView;
}       
NSString*st1=@“10”;
if([str isEqualToString:st1]){
//pinView.pinColor=MKPinAnnotationColorGreen;
pinView.image=[UIImage ImageName:@“blackDot.png”];
//返回pinView;
}
NSString*st2=@“20”;
if([str isEqualToString:st2]){
//pinView.pinColor=MKPinAnnotationColorPurple;
pinView.image=[UIImage ImageName:@“greendot.png”];
//返回pinView;
}
NSString*st3=@“30”;
if([str isEqualToString:st3]){
//pinView.pinColor=MKPinAnnotationColorRed;
pinView.image=[UIImage ImageName:@“blueDot.png”];
//返回pinView;
}
pinView.canShowCallout=是;
infoButton=[UIButton Button类型:UIButtonTypedTailDisclosure];
//显示*t=注释;
infoButton.tag=k;
[infoButton addTarget:self action:@selector(pinLabelClicked:)for ControlEvents:UIControlEventTouchUpInside];
pinView.rightCalloutAccessoryView=infoButton;
} 
否则{
[mapview.userLocation setTitle:@“我在这里”];
}
返回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];
}
}
-(void)生成符号
{
[mapview setMapType:MKMapTypeStandard];
[mapview SetZoomeEnabled:是];
[地图视图设置可克隆:是];
[mapview setDelegate:self];

对于(int i=0;i,如前一个问题所述:

您需要将
subtitle
保留为空,并在注释类中使用单独的自定义属性来存储类别

这样,
副标题
将不会显示在标注中(因为它将是空白的),但您仍可以获取注释的类别以进行决策


首先,在注释类.h(即DisplayMap.h)中,为
类别添加一个属性:

@property (nonatomic, copy) NSString *category;
接下来,在Display.m中,合成属性:

@synthesize category;
接下来,在当前设置注释的
子标题的
生成注释中,改为设置
类别
,并
子标题保留为空(不要设置它)

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

最后,在注释的
视图中
,可以检查注释的
类别

因此,替换此部分:

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

另一个完全不同的问题是,您似乎正在使用按钮标记和自定义方法来处理标注按钮按下。在自定义方法中,您可能试图获取所点击注释的数据。我强烈建议不要使用按钮标记或自定义方法。有关更好的替代方法,请参阅以下内容:


如前一个问题所述:

您需要将
subtitle
保留为空,并在注释类中使用单独的自定义属性来存储类别

这样,
副标题
将不会显示在标注中(因为它将是空白的),但您仍可以获取注释的类别以进行决策


首先,在注释类.h(即DisplayMap.h)中,为
类别添加一个属性:

@property (nonatomic, copy) NSString *category;
接下来,在Display.m中,合成属性:

@synthesize category;
接下来,在当前设置注释的
子标题的
生成注释中,改为设置
类别
,并
子标题保留为空(不要设置它)

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

最后,在注释的
视图中
,可以检查注释的
类别

因此,替换此部分:

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类别pin,但列表视图显示了其中三个pin……不,每个批注都单独调用viewForAnnotation。只要该方法中的逻辑基于传入的特定批注,就可以了。如果仍然存在问题嗯,你可以问另一个问题并加入新代码。非常感谢Anna,但是使用这种方法,我只能在mapview中获得一个bluedot类别pin,但是列表视图显示了其中三个。不,viewForAnnotation是为每个批注单独调用的。只要该方法中的逻辑基于特定批注传入时,应为f