【问题标题】:MKAnnotation display all pin titles without clickingMKAnnotation 无需点击即可显示所有图钉标题
【发布时间】:2012-07-05 09:46:33
【问题描述】:

我正在像这样以编程方式添加多个注释:

- (void)addAnnotations{
    NSInteger i;
    CLLocationCoordinate2D location;

    for ( i = 0 ; i < [storeLatitude count] ; i ++ ){
        location.latitude = [[storeLatitude objectAtIndex:i] floatValue];
        location.longitude = [[storeLongitude objectAtIndex:i] floatValue];

        MapViewAnnotation *newAnnotation = [[MapViewAnnotation alloc] initWithTitle:[listOfStores objectAtIndex:i] andCoordinate:location];
        [self.mapView addAnnotation:newAnnotation];
        [newAnnotation release];    
    }
}

是否可以在不点击它们的情况下显示所有图钉的标题?

【问题讨论】:

    标签: ios mkannotation mkannotationview


    【解决方案1】:

    声明一个数组来存储所有注解并使用MKMapView的setSelectedAnnotations:(NSArray *)方法

    - (void)addAnnotations {
    
        NSMutableArray *annotationArray = [[NSMutableArray alloc]init];
        NSInteger i;
        CLLocationCoordinate2D location;
    
        for ( i = 0 ; i < [storeLatitude count] ; i ++ ) {
            location.latitude = [[storeLatitude objectAtIndex:i] floatValue];
            location.longitude = [[storeLongitude objectAtIndex:i] floatValue];
    
            MapViewAnnotation *newAnnotation = [[MapViewAnnotation alloc] initWithTitle:    [listOfStores objectAtIndex:i] andCoordinate:location];
            [annotationArray addObject:newAnnotation];
            [self.mapView addAnnotation:newAnnotation];    
        }
        [mapView setSelectedAnnotations:annotationArray];
    }
    

    【讨论】:

      【解决方案2】:

      试试这个。它会自动显示标题。

      -(void)mapView:(MKMapView *)mapView1 didAddAnnotationViews:(NSArray *)views
      {
          [self.mapView selectAnnotation:yourannotationpin animated:NO];
      }
      

      【讨论】:

        【解决方案3】:

        U 可以使用自定义注释视图来显示标题和子标题,而无需单击图钉。 有一个自定义注释视图的教程。

        This app contains the custom annotation view

        【讨论】:

        • 答案中的链接已失效 - 抱歉,找不到该页面
        【解决方案4】:

        找不到setSelectedAnnotations 的快速版本。下面显示了标题,但是对于多个移动目标,仅显示数组中最后一个的标题,直到didAdd 的下一次迭代。所以仍在寻找更通用/完整的解决方案。

        func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
            for view in views {
                if let annotation = view.annotation, let title = annotation.title {
                    print("displaying:\(title!)")
                    mapView.selectAnnotation( annotation, animated: true )
                }
            }
        }
        

        【讨论】:

          【解决方案5】:

          不,这是不可能的。您必须单击 pin Annotation 才能显示标题。

          【讨论】:

            猜你喜欢
            • 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
            相关资源
            最近更新 更多