2013-02-11 52 views
8

我想在我正在显示的地图上单击DetailDisclosure时切换视图。我当前的代码如下:MKAnnotationView在DetailDesclosure按钮被点击时推送到视图控制器

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control 
{ 
    DetailViewController *detailViewController = [[DetailViewController alloc] 
    initWithNibName:@"DetailViewController" bundle:nil]; 
    detailViewController.title = dictionary[@"placeLatitude"] 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
} 

我推到这个视图控制器,但我还没有想出如何迫使它从用于生成第一地图JSON数组拉细节地点。我拉这样的数据来生成地图:

for (NSDictionary *dictionary in array) 
{ 
    // retrieve latitude and longitude from the dictionary entry 

    location.latitude = [dictionary[@"placeLatitude"] doubleValue]; 
    location.longitude = [dictionary[@"placeLongitude"] doubleValue]; 

    //CAN I LOAD THE TITLE/ID OF THE LOCATION HERE? 

我知道我有点偏离目标。也许只是在正确的方向踢一脚也许会有所帮助。谢谢!

回答

11

如果您正在使用故事板并从当前场景到目标场景有一个延续,您只需回复calloutAccessoryControlTapped即可。例如:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    [self performSegueWithIdentifier:@"Details" sender:view]; 
} 

很明显,你可以检查注释与该view相关,等等,如果你有你想要求不同的注释类型不同塞格斯类型。

而且,当然,如果你想像往常一样传递任何信息到prepareForSegue的下一个场景。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Details"]) 
    { 
     MKAnnotationView *annotationView = sender; 
     [segue.destinationViewController setAnnotation:annotationView.annotation]; 
    } 
} 

正如你所看到的,我通过annotation对象到我的下一个视图。如果您的JSON结构中有与每个注释关联的其他字段,则一个简单的解决方案是将属性添加到与您要跟踪的每个字段关联的自定义视图。只需转到注释自定义类的.h并添加所需的属性即可。然后,当您创建自定义注释(要添加到地图)时,也可以设置这些属性。然后,当您将此注释传递给下一个视图控制器时,您所需的所有属性都将在此处可用。


显然,如果你使用的发钞银行,只是做任何你想要实例化一个视图控制器NIB等价物,设置任何你想要的属性,要么推给它或模态呈现它,例如:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    DetailsViewController *controller = [[DetailsViewController alloc] initWithNibName:nil 
                       bundle:nil]; 
    controller.annotation = annotationView.annotation; 
    [self.navigationController pushViewController:controller animated:YES]; // or use presentViewController if you're using modals 
} 
+0

感谢Rob,我是否需要使用故事板才能拥有Segue? – Brandon 2013-02-11 04:56:47

+0

k我看着它。一如既往 - YOU ROCK – Brandon 2013-02-11 04:58:30

+0

那么,如何访问新视图上的字段?我正试图在我的应用中完成同样的事情。 – 2014-02-19 22:12:35

相关问题