如何在地图注释(引脚)上自动显示标题/副标题

时间:2010-09-07 23:47:28

标签: iphone map annotations

我正在地图视图中加载注释。加载地图时,注释显示为引脚。

但是,标题和副标题不会自动出现在引脚上。目前,用户需要在标题显示之前点击图钉。

加载地图时,有没有办法让标题在引脚上自动显示?

(这个问题几乎是一样的,但不完全相同:To display the title for the current loaction in map in iphone因为我已经在我的对象中定义了-title和-subtitle属性。)

由于

4 个答案:

答案 0 :(得分:16)

要调用的方法是来自MKMapView的“selectAnnotation:animated”。

答案 1 :(得分:9)

- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views
{    
    MKAnnotationView *annotationView = [views objectAtIndex:0];
    id<MKAnnotation> mp = [annotationView annotation];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate] ,350,350);

    [mv setRegion:region animated:YES];    

    [mapView selectAnnotation:mp animated:YES];

}

如果您正在执行调用setRegion方法的相同操作,请确保调用

[mapView selectAnnotation:mp animated:YES];

[mv setRegion:region animated:YES];    

答案 2 :(得分:0)

从iOS 11开始,有一种名为MKAnnotationView的{​​{1}}新类型,可以在不被选中的情况下显示标题和副标题。查看https://developer.apple.com/documentation/mapkit/mkmarkerannotationview

MKMarkerAnnotationView

答案 3 :(得分:0)

添加一个后续答案(适用于Xcode 11.4和Swift 5),因为我遇到了这个确切的问题,但是上述答案不起作用。 @zsani是正确的,因为您需要使用MKMarkerAnnotationView(而不是MKPinAnnotationView)来同时获取两者,但是您还必须设置titleVisibilitysubtitleVisibility属性(尽管titleVisibility似乎默认与MKMarkerAnnotationView一起打开)。

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    // do not alter user location marker
    guard !annotation.isKind(of: MKUserLocation.self) else { return nil }

    // get existing marker
    var view = mapView.dequeueReusableAnnotationView(withIdentifier: "reuseIdentifier") as? MKMarkerAnnotationView

    // is this a new marker (i.e. nil)?
    if view == nil {
        view = MKMarkerAnnotationView(annotation: nil, reuseIdentifier: "reuseIdentifier")
    }

    // set subtitle to show without being selected
    view?.subtitleVisibility = .visible

    // just for fun, show green markers where subtitles exist; red otherwise
    if let _ = annotation.subtitle! {
        view?.markerTintColor = UIColor.green
    } else {
        view?.markerTintColor = UIColor.red
    }

    return view
}

共享,以防其他人遇到同样的问题。