我想面对一些mapkit问题的帮助。应该是一个愚蠢的问题,或者我在浏览mapkit框架时错过了一些东西。
这是Senario。 当用户执行像披萨这样的搜索时,我在地图上放置了多个注释。 添加了右侧注释视图的按钮,单击该按钮可打开下一个详细视图。问题是如何将一些信息发送到下一个视图,例如我在创建注释时添加索引,现在我想从注释中访问此信息,并通过按钮上的选择器将其传递给下一个视图。 / p>
我已经检查了所有的mapkit,但没有找到一个我可以用下一个视图和注释映射此信息的地方。
希望我在问题上没有让你们困惑。请让我知道我会重新构建它。
提前预售。
答案 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;