gpt4 book ai didi

ios - 如何访问方法 calloutAccessoryControlTapped 中的注释属性

转载 作者:行者123 更新时间:2023-12-01 18:15:15 25 4
gpt4 key购买 nike

当用户点击 map 注释中的标注时,我正在尝试打开详细 View Controller 。

我创建了一个名为 myAnnotation 的自定义注释子类,并在其中包含了一个名为 idEmpresa 的属性。

在自定义方法中,我将注释声明如下:

double latitud = [[[categorias objectAtIndex:i] objectForKey:@"latitud"] doubleValue];

double longitud = [[[categorias objectAtIndex:i] objectForKey:@"longitud"]doubleValue];

CLLocationCoordinate2D lugar;
lugar.latitude = latitud;
lugar.longitude = longitud;

NSString *nombre = [[categorias objectAtIndex:i] objectForKey:@"titulo"];

CLLocationCoordinate2D coordinate3;
coordinate3.latitude = latitud;
coordinate3.longitude = longitud;
myAnnotation *annotation3 = [[myAnnotation alloc] initWithCoordinate:coordinate3 title:nombre ];

annotation3.grupo = 1;

int number = [[[categorias objectAtIndex:i] objectForKey:@"idObjeto"] intValue];

annotation3.idEmpresa = number;
NSLog(@"ESTA ES LA ID DE LA EMPRESA %d",number);
[self.mapView addAnnotation:annotation3];

您可能会看到注解有一个属性 annotation3.idEmpresa .

然后,在方法 calloutAccessoryControlTapped我需要访问这个属性。我知道如何访问该方法中的注释标题和副标题:
NSString *addTitle = [[view annotation] title  ];
NSString *addSubtitle = [[view annotation] subtitle ];

但它不适用于属性 idEmpresa
NSString *addTitle = [[view annotation] title  ];

最佳答案

annotation位于 MKAnnotationView 的属性(property)一般键入为 id<MKAnnotation> .

这意味着它将指向一些实现 MKAnnotation 的对象。协议(protocol)。
该协议(protocol)仅定义了三个标准属性( titlesubtitlecoordinate )。

您的自定义类(class) myAnnotation实现 MKAnnotation协议(protocol)等具有三个标准属性,但也有一些自定义属性。

因为annotation如果您尝试访问不在标准协议(protocol)中的自定义属性,则编译器只知道三个标准属性并给出警告或错误。

让编译器知道 annotation在这种情况下,对象是 myAnnotation 的一个实例。 ,您需要对其进行强制转换,以便它可以让您在没有警告或错误的情况下访问自定义属性(并且代码完成也将开始帮助您)。

在强制转换之前,使用 isKindOfClass: 检查对象是否真的是你想要强制转换的类型很重要。 .如果您将一个对象转换为一个实际上不是的类型,您很可能最终会在运行时生成异常。

例子:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
if ([view.annotation isKindOfClass:[myAnnotation class]])
{
myAnnotation *ann = (myAnnotation *)view.annotation;
NSLog(@"ann.title = %@, ann.idEmpresa = %d", ann.title, ann.idEmpresa);
}
}

关于ios - 如何访问方法 calloutAccessoryControlTapped 中的注释属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22572342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com