Mapkit具有多个注释(callout),映射下一个视图

时间:2010-08-15 16:26:16

标签: iphone objective-c mapkit mkmapview

我想面对一些mapkit问题的帮助。应该是一个愚蠢的问题,或者我在浏览mapkit框架时错过了一些东西。

这是Senario。 当用户执行像披萨这样的搜索时,我在地图上放置了多个注释。 添加了右侧注释视图的按钮,单击该按钮可打开下一个详细视图。问题是如何将一些信息发送到下一个视图,例如我在创建注释时添加索引,现在我想从注释中访问此信息,并通过按钮上的选择器将其传递给下一个视图。 / p>

我已经检查了所有的mapkit,但没有找到一个我可以用下一个视图和注释映射此信息的地方。

希望我在问题上没有让你们困惑。请让我知道我会重新构建它。

提前预售。

3 个答案:

答案 0 :(得分:9)

为注释创建UIButton时,将tag属性(标记为NSInteger的{​​{1}}属性)设置为标识该标识的id或数组索引相关对象。然后,您可以从UIView参数中将该标记值检索到选择器。


修改:这是一些示例代码。

您可以创建注释视图并将该按钮关联到代理的-mapView:viewForAnnotation:method:

sender

}

然后在您的操作方法中,您将从- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { // Boilerplate pin annotation code MKPinAnnotationView *pin = (MKPinAnnotationView *) [self.map dequeueReusableAnnotationViewWithIdentifier: @"restMap"]; if (pin == nil) { pin = [[[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: @"restMap"] autorelease]; } else { pin.annotation = annotation; } pin.pinColor = MKPinAnnotationColorRed pin.canShowCallout = YES; pin.animatesDrop = NO; // now we'll add the right callout button UIButton *detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; // customize this line to fit the structure of your code. basically // you just need to find an integer value that matches your object in some way: // its index in your array of MKAnnotation items, or an id of some sort, etc // // here I'll assume you have an annotation array that is a property of the current // class and we just want to store the index of this annotation. NSInteger annotationValue = [self.annotations indexOfObject:annotation]; // set the tag property of the button to the index detailButton.tag = annotationValue; // tell the button what to do when it gets touched [detailButton addTarget:self action:@selector(showDetailView:) forControlEvents:UIControlEventTouchUpInside]; pin.rightCalloutAccessoryView = detailButton; return pin; 解压缩值并使用它来显示正确的详细信息:

tag

答案 1 :(得分:1)

在Annotation视图中,是否可以抓取标题或字幕或创建引脚时使用的任何其他信息?我想要做的是根据其中一个变量在注释中弹出一个特定的图像。

#import "MapPin.h"

@implementation MapPin


@synthesize coordinate;
@synthesize title;
@synthesize subtitle;
@synthesize indexnumber;
@synthesize imageFile;

-(id)initWithCoordinates:(CLLocationCoordinate2D)location
               placeName: placeName
             description:description
                indexnum:indexnum
            imageFileLoc:imageFileLoc{

    self = [super init];
    if (self != nil) {
        imageFile=imageFileLoc;
        [imageFile retain];
        indexnumber=indexnum;
        [indexnumber retain];
        coordinate = location;
        title = placeName;
        [title retain];
        subtitle = description;
        [subtitle retain];
    }
    return self;

}



-(void)addAnnotations {

    // Normally read the data for these from the file system or a Web service
    CLLocationCoordinate2D coordinate = {35.9077803, -79.0454936};
    MapPin *pin = [[MapPin alloc]initWithCoordinates:coordinate
                                          placeName:@"Keenan Stadium"
                                        description:@"Tar Heel Football"
                                            indexnum:@"1"
                                        imageFileLoc:@"owl.jpg"];
    [self.map addAnnotation:pin];

答案 2 :(得分:1)

另一种选择:

您可以实施以下方法:

- (void)mapView:(MKMapView *)mapView didSelectAnnotation:(MKAnnotationView *)view;
- (void)mapView:(MKMapView *)mapView didDeselectAnnotation:(MKAnnotationView *)view;