Ios 如何将右侧附件按钮置于当前位置标注上?
我想在当前用户位置标注中添加一个右附件按钮。我发现了一些关于这个话题的问题,但它们似乎不适合我。以下是我迄今为止的代码,我已成功地将右侧附件按钮添加到其他注释中:Ios 如何将右侧附件按钮置于当前位置标注上?,ios,gps,mkmapview,mkannotation,mkannotationview,Ios,Gps,Mkmapview,Mkannotation,Mkannotationview,我想在当前用户位置标注中添加一个右附件按钮。我发现了一些关于这个话题的问题,但它们似乎不适合我。以下是我迄今为止的代码,我已成功地将右侧附件按钮添加到其他注释中: - (MKAnnotationView *)mapView:(MKMapView *)_mapView viewForAnnotation:(id<MKAnnotation>)annotation { //TODO: this doesn't seem to be working? if ([a
- (MKAnnotationView *)mapView:(MKMapView *)_mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
//TODO: this doesn't seem to be working?
if ([annotation isKindOfClass:[MKUserLocation class]]) {
MKAnnotationView * aV = [mapView viewForAnnotation:annotation];
aV.canShowCallout = YES;
aV.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
return nil;
}
return nil;
}
-(MKAnnotationView*)地图视图:(MKMapView*)\u地图视图用于注释:(id)注释
{
//托多:这好像不起作用?
if([annotation isKindOfClass:[MKUserLocation类]]){
MKAnnotationView*aV=[mapView视图用于注释:注释];
aV.canShowCallout=是;
aV.rightCalloutAccessoryView=[UIButton Button类型:UIButtonTypedTailExposition];
返回零;
}
返回零;
}
我在一些地方读到过,解决方案是为用户位置创建一个自定义MKAnnotationView,但我还没有看到如何为用户位置创建自定义MKAnnotationView的演示——我已经成功地为地图上的其他注释创建了此功能
示例代码将是最有帮助的,谢谢 您的主要问题是在这两种情况下都返回零。您还应该使用重用标识符
- (MKAnnotationView *)mapView:(MKMapView *)_mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]]) {
MKAnnotationView * aV = [mapView dequeueReusableAnnotationViewWithIdentifier:@"locationView"];
if (aV == nil)
aV = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"locationView"];
aV.canShowCallout = YES;
aV.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
return aV;
}
return nil;
}
有关详图索引附件的行为。同样,您应该获得用户位置注释视图的参考。 在iOS>=5中调用以下方法 选项1
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
MKAnnotationView *aV;
for (aV in views) {
if ([aV.annotation isKindOfClass:[MKUserLocation class]]) {
MKAnnotationView* annotationView = aV;
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
}
}
}
请参见下面的委托方法
替代方法
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
MKAnnotationView* annotationView = [mapView viewForAnnotation:userLocation];
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
}
确保添加委托方法,以便在点击callout按钮时可以执行任何操作:
-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
在任何iOS中,都会调用这些方法中的任何一个,您可以向其中添加右/左accessorybutton。通过检查用户位置注释视图的子视图计数,确保不会添加此按钮两次
您也可以添加/删除附件在运行时查看它,但我相信您不会想删除它。按钮看起来很有希望,我会尝试一下并相应地投票!这对你有用吗?我在我的一个应用程序中有几乎相同的代码,我没有遇到任何问题。恐怕没有!我现在在地图上没有看到用户位置标记,有点不对劲。如果我把它改回return nil,那么它会像以前一样工作,但是附件按钮当然不会显示。建议?这不起作用,因为
MKAnnotationView
本身不显示任何内容。您需要设置image属性或使用子类。蓝色用户位置视图由一个名为MKModernUserLocationView
的私有子类实现(在iOS 7中)@查图尔的回答是正确的。谢谢@chatur,这确实有效!顺便问一下,您如何同时支持iOS4.x和iOS5版本?
-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control