您可以从MKAnnotationView
提供的数据访问
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
该view
对象具有一个annotation
属性,它将为您提供一个采用该MKAnnotation
协议的对象。这可能是MKPointAnnotation
你已经拥有的,如果只是一个title
并且subtitle
会做的话。但是您也可以定义一个自定义注释类,该类包含 astatus
和 a company
:
MyAnnotation *annotation = view.annotation;
// annotation.status
// annotation.company
您必须创建一个MyAnnotation
实例并将数据插入到您当前正在创建的位置newAnnotation
。
至于一旦你有了你需要的数据并且你想将它传递给 DetailViewController,我建议在这里查看这个 SO 答案或Ole Begemann 的提示。简而言之,您可以创建详细视图控制器的公共属性,然后执行以下操作:
DetailViewController *destinationController = [[DestinationViewController alloc] init];
destinationController.name = annotation.status;
[self.navigationController pushViewController:destinationController animated:YES];
总之,您的方法可能看起来像这样:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view
calloutAccessoryControlTapped:(UIControl *)control
{
MyAnnotation *annotation = view.annotation;
DetailViewController *detail = [[DetailViewController alloc] initWithNibName:nil
bundle:nil];
detail.status = annotation.status;
detail.company = annotation.company;
[self.navigationController pushViewController:detail animated:YES];
}
然后UILabel
在您的详细视图控制器中设置文本:
- (void)viewDidLoad
{
[super viewDidLoad];
self.statusTextField.text = self.status;
self.companyTextField.text = self.company;
}
更新以阐明以下内容的创建MyAnnotation
:
您始终可以选择创建自定义类。这里可能是一个例子MyAnnotation.h
:
#import <MapKit/MapKit.h>
@interface MyAnnotation : MKPointAnnotation
@property (strong, nonatomic) NSString *status;
@property (strong, nonatomic) NSString *company;
@end
然后在您的地图视图控制器中导入:#import "MyAnnotation.h"
并使用MyAnnotation
而不是MKPointAnnotation
:
// create the annotation
newAnnotation = [[MyAnnotation alloc] init];
newAnnotation.title = dictionary[@"applicant"];
newAnnotation.subtitle = dictionary[@"company"];
newAnnotation.status = dictionary[@"status"];
newAnnotation.company = dictionary[@"company"];
newAnnotation.coordinate = location;
[newAnnotations addObject:newAnnotation];