0

我有一个包含一些信息的 json 文件我想在地图上显示这些信息,我可以在地图上显示 Long 和 Lat,当你点击 Annotation 我有一个按钮我想在详细视图上显示我的 json 的详细信息,我的问题是我不知道如何根据单击的注释显示/发送有关详细视图的信息,

这是我将如何加载我的 detailViwe

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control
{
    DetailViewController *detail = [[DetailViewController alloc] initWithNibName:nil 
bundle:nil];

    // my question is here In my detail view I have label like status, company, how to add json info here

    detail.status.text = ??!!!
    detail.company.text = ??!!!

    [self.navigationController pushViewController:detail animated:YES];
}

在我的日志中,我打印了正确的状态,但在我的详细视图控制器中,我打印了空值

- (void)viewDidLoad
{
[super viewDidLoad];

self.status.text = _status.text;
    NSLog(@"Status %@ ",_status );
    NSLog(@"Status is %@ ",self.status.text);

}

Print is Status null // // // 状态为 null

4

1 回答 1

1

您可以从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];
于 2014-07-21T23:05:24.990 回答