【问题标题】:Displaying TableView when MKAnnotation(Pin) in MKMapView touched/pressed/clicked当 MKMapView 中的 MKAnnotation(Pin) 触摸/按下/单击时显示 TableView
【发布时间】:2011-07-13 19:30:29
【问题描述】:

我想在有人触摸某个图钉时显示相当多的人口统计数据,因此提供弹出窗口并不能减少它。我想一旦触摸到 pin,我只需将 tableviewController 粘贴到 NavigationController 上,表格视图将可以访问对象并显示单个对象信息,每行一个项目和 1 个部分。

无论如何,我很难弄清楚 MKMapViewDelegates 方法,因为它们似乎都没有做我需要的和/或允许我返回 tableview 或将该视图推送到导航控制器上。

我玩过:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;   

但这需要返回一个 MKAnnotationView,我真的只需要通过向用户显示所有数据的表格视图来使用此方法。我希望有一些简单的东西,比如 userDidTouchPin 方法....

有人知道如何完成我想做的事情吗?

【问题讨论】:

    标签: xcode4 mkmapview mkmapviewdelegate


    【解决方案1】:

    如果您想在用户选择图钉(而不是其标注上的按钮)时执行某些操作,则实现 mapView:didSelectAnnotationView: 委托方法并在那里展示或推送您的详细视图控制器。

    选中的注解对象可作为view参数的annotation属性使用:

    - (void)mapView:(MKMapView *)mapView 
        didSelectAnnotationView:(MKAnnotationView *)view
    {   
        YourDetailViewController *dvc = [[YourDetailViewController alloc] init...
        dvc.annotation = view.annotation;
        //present or push here
        [dvc release];
    }
    

    您可能需要检查选择了哪种类型的注解(例如,如果选择了 MKUserLocation 则什么都不做等),并且您可能需要将 view.annotation 转换为您自己的注解类,以便轻松访问您可能拥有的任何自定义属性.

    【讨论】:

    • 非常感谢!不知道为什么我错过了文档中的“选择注释视图”部分!不过,我不确定您是否要释放控制器,这不是由 NavigationController 处理的吗?我问是因为我之前已经对此进行了“发布”,但它引起了问题。
    • 除非您使用 ARC 或在 alloc+init 行上执行 autorelease,否则您执行 need to release。如果这产生了问题,那么在呈现的视图控制器中可能存在其他问题。可能想问另一个关于它的问题,并包括任何错误消息和堆栈跟踪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多