我无法在Split-View基础中的Detailpane中的MKMap上显示注释

我在主窗格(左)(弹出窗口)中有表,并且当我在主窗格中选择一行时,详细信息窗格(右)应该出现一个注释,但没有出现。

SecondViewController.m中函数didSelectRowAtIndexPath中的代码

- (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函数链接到一个按钮,并且在选择行并没有发生任何事情之后,必须按下该按钮,注释才会出现。所以,我错过了什么?

最佳答案

可能不起作用的主要原因是在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];

并摆脱全局变量。

关于ios - 如何在拆分 View ipad编程中实时在MKMap上添加引脚注释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6813388/

10-12 04:51