我无法在Split-View base
中的Detailpane中显示MKMap上的注释我在主窗格(左)(popover)中有表格,当我在主窗格中选择一行时,详细信息窗格(右)应该有一个注释,但不是。
函数didSelectRowAtIndexPath中的代码在SecondViewController.m
中- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
DetailViewController *dTVC = [[DetailViewController alloc] init];
Lat = 15.1025;
Long = 100.2510;
[dTVC setShowAnnotation];
}
注意到Lat和Long是全局变量
DetailViewController.m中函数setShowAnnotation中的代码
- (void)setShowAnnotation {
[_mapView removeAnnotation:self.customAnnotation];
self.customAnnotation = [[[BasicMapAnnotation alloc] initWithLatitude:Lat andLongitude:Long] autorelease];
[_mapView addAnnotation:self.customAnnotation];
}
当我选择行没有任何反应时,我必须将函数setShowAnnotion链接到一个按钮,并且在选定的行之后没有任何反应,必须按下该按钮并显示注释。那么,我错过了什么?
答案 0 :(得分:0)
可能不起作用的主要原因是在didSelectRowAtIndexPath
中,您正在创建DetailViewController
的新实例,而不是使用已经显示的实例。
您创建的新实例也未显示(显示),因此即使setShowAnnotation可能正常工作,您也无法在屏幕上看到任何内容。
在标准的基于Split View的应用程序中,左侧的主窗格称为RootViewController(您调用的是SecondViewController)。在标准模板中,已有detailViewController
ivar指向当前显示的DetailViewController
实例。
您可能希望使用标准模板从头开始重新启动应用程序,尽可能少地进行更改并使用预编码功能。或者,使用标准模板创建一个新项目,并研究它的工作原理并相应地修改项目。
然后,在didSelectRowAtIndexPath
,而不是创建DetailViewController
的新实例,只需在ivar上调用setShowAnnotation
:
[detailViewController setShowAnnotation];
我建议的另一件事是,不是使用全局变量将坐标“传递”到细节视图,而是将纬度和经度作为参数添加到setShowAnnotation
方法本身。
因此方法声明类似于:
- (void)setShowAnnotationWithLat:(CLLocationDegrees)latitude
andLong:(CLLocationDegrees)longitude;
它会像这样调用:
[detailViewController setShowAnnotationWithLat:15.1025 andLong:100.251];
并摆脱全局变量。