【问题标题】:Annotation details after detail disclosure pressed?详细披露后的注释细节?
【发布时间】:2012-04-10 04:30:22
【问题描述】:

我有一个 MKMapView 注释对象,它有一个正确的标注附件细节披露按钮。当按下按钮时,我正在使用 addTarget:action:forControlEvent 调用选择器方法,该方法创建详细视图控制器并将其推送到视图堆栈上。

我的问题是访问启动标注细节控制器的注释信息的最佳方式是什么。详情披露按钮设置为调用:

[button addTarget:self action:@selector(disclosurePressed:) forControlEvents:UIControlEventTouchUpInside];

看起来像这样:

- (void)disclosurePressed:(id)sender {
}

我想我可以寻找发送者 UIButton 的父注释,任何人都可以给我任何关于如何最好地完成的指针。

【问题讨论】:

    标签: iphone objective-c ios cocoa-touch mkmapview


    【解决方案1】:

    一种可靠的方法(如果您必须使用自定义方法)是查看地图视图的selectedAnnotations 属性。

    虽然属性是NSArray,但由于地图视图一次只允许选择一个注释,用户刚刚点击的注释将在索引0处,因此它是:

    id<MKAnnotation> annTapped = [mapView.selectedAnnotations objectAtIndex:0];
    
    //Here, you can cast annTapped to a custom annotation class if needed.
    //Be sure to check what kind of class it is first.
    

    为了安全起见,您可能还想先检查 mapView.selectedAnnotations.count 是否不为零。


    但是,比使用 addTarget 和自定义操作方法更好的方法(正如 nevan king 已经回答的那样)是使用地图视图的 calloutAccessoryControlTapped 委托方法,其中可以通过 view 参数直接访问注释:

    id<MKAnnotation> annTapped = view.annotation;
    

    【讨论】:

    • 我怎样才能从中得到一个数字?例如,如果我想获取注释的 ID# 以从 API 等检索适当的内容
    • @carbonr,希望能解决这个问题。如果仍然感到困惑,建议您Ask A Question 并附上问题的详细信息。
    • 安娜你真棒!以前的链接是解决方案。发生的事情是当我在我的自定义类中存储数据时它抛出了一个错误,所以我认为我错了,但我已经弄清楚了
    【解决方案2】:

    使用MKMapViewDelegate mapView:annotationView:calloutAccessoryControlTapped: 方法可能会更轻松,该方法会直接告诉您点击了哪个注释视图。

    【讨论】:

    • 啊哈 :) 这听起来正是我所追求的,让我试一试。非常感谢内文。
    • 没问题。我忘了提到你可以通过 MKAnnotationView 的annotation 属性访问实际的注释。
    • 感谢 Nevan,祝您有美好的一天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多