我是Xcode的新手所以请原谅我的问题,如果这是愚蠢的
我有一个链接到UIAlertView框的注释,它有两个选项(关闭,方向到这里) 第二个按钮应该打开苹果地图应用程序,并立即提供转向导航给用户。
现在我的问题是我的地图上有很多注释,当按下每个注释时,用户必须获得导航选项。所以我没有固定的MKPlacemark,我需要将按下的注释中的信息传递给MKPlacemark,以便MKMapItem获得所需的标题位置。
我的代码是:
My Annotation方法将显示UIAlertView:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
// get reference to the annotation to access its data
VBAnnotation *ann = (VBAnnotation *)view.annotation;
// deselect the button
[self.mapView deselectAnnotation:ann animated:YES];
// display alert view to the information
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:ann.title message:ann.info delegate:self cancelButtonTitle:@"close" otherButtonTitles:@"direction to here", nil];
[alert show];
}
这里是我的UIAlertView按钮操作:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if([title isEqualToString:@"direction to here"])
{
//now here i tried a fixed coordination, but i need to pass the actual coordination pressed by the UIAlertView
CLLocationCoordinate2D coordinate;
coordinate.latitude = 24.41351;
coordinate.longitude = 39.543002;
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
MKMapItem *navigation = [[MKMapItem alloc]initWithPlacemark:placemark];
NSDictionary *options = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeWalking};
[navigation openInMapsWithLaunchOptions:options];
}
}
以下是我的注释列表的示例
NSMutableArray *annotations = [[NSMutableArray alloc] init];
CLLocationCoordinate2D location;
VBAnnotation *ann;
//Annotations List
// Mecca Pin
location.latitude = MEC_LATITUDE;
location.longitude = MEC_LONGITUDE;
ann = [[VBAnnotation alloc] init];
[ann setCoordinate:location];
ann.title = @"NewHorizons Institute";
ann.subtitle = @"English and computer training center";
[annotations addObject:ann];
[self.mapView addAnnotations:annotations];
当然我有一个名为VBAnnotation的课程
谢谢...
答案 0 :(得分:2)
如果我理解正确,您需要记住VBAnnotation
对象,以便警报视图委托方法可以访问它。您可以在显示警报视图之前使用objc_setAssociatedObject()
将对象与警报视图关联,然后在处理用户对警报的响应时使用objc_getAssociatedObject()
检索对象。
This article提供了有关Obj-C相关对象的更多信息。要导入以获取函数的文件是:
#import <objc/runtime.h>
如果可以使用某种数字ID或索引标识VBAnnotation
对象,则更简单的方法是将该ID或索引存储在警报视图的tag
属性中 - {{ 1}}是UIAlertView
的子类,因此继承了该属性。