iOS:如何根据点击的注释在地图视图中加载对象?
我有一个带有mapview的应用程序,其中包含各种建筑对象(我自己的类)。每个建筑都有一个注释属性,所有这些都非常有效,用户可以在表格中搜索所需的建筑,点击一个按钮,它将显示相关的注释 现在我在注释上有一个callout按钮,它调用一个方法(showDetails),该方法将一个segue推送到DetailViewController,但是我遇到的问题是如何将正确的建筑传递到这个DetailViewController。所有建筑物都存储在数据控制器的一个数组中,如果可能的话,我想从中加载一个 到目前为止,我使用了controlWasTapped方法,其中我简单地说:iOS:如何根据点击的注释在地图视图中加载对象?,ios,annotations,android-mapview,master-detail,uicontrol,Ios,Annotations,Android Mapview,Master Detail,Uicontrol,我有一个带有mapview的应用程序,其中包含各种建筑对象(我自己的类)。每个建筑都有一个注释属性,所有这些都非常有效,用户可以在表格中搜索所需的建筑,点击一个按钮,它将显示相关的注释 现在我在注释上有一个callout按钮,它调用一个方法(showDetails),该方法将一个segue推送到DetailViewController,但是我遇到的问题是如何将正确的建筑传递到这个DetailViewController。所有建筑物都存储在数据控制器的一个数组中,如果可能的话,我想从中加载一个 到
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
for (Building* theBuilding in self.datacontroller.masterArray){
if(theBuilding.name isEqualToString:view.annotation.title){
NSLog(@"theBuilding's name %@", theBuilding.name);
}
}
这工作正常,并返回正确的建筑,但如何将其发送到DetailViewController,我感到困惑。我有一个PrepareForSegue方法,但如何才能找到正确的建筑?另外,既然我已经完成了SelectAnnotation,是否需要我的showDetails方法
我在想我可以修改showDetails方法,这样它就需要一个建筑类型的参数,然后我可以在prepareForSegue中提供建筑细节,但如果有更好的方法,我很想知道
那么,最好的计划是什么?非常感谢在包含您发布的代码的类中声明一个实例变量
Building *buildingOfInterest;
然后
然后:
在目标视图控制器的头文件中:
@interface MyBuildingVC : UIViewController
@property (strong) Building * building;
@end
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ShowBuildingSegue"])
((MyBuildingVC *)segue.destinationViewController).building = buildingOfInterest;
}
@interface MyBuildingVC : UIViewController
@property (strong) Building * building;
@end