也许问题很奇怪,但我真的想知道怎么做。
我有一个自定义注释的类:
-(MKAnnotationView *)annotation
{
NSArray *imageArray = [[NSArray alloc] initWithObjects:@"pin1",@"pin2",@"pin3", nil];
AnnotationViewController *vc = [[AnnotationViewController alloc] initWithNibName:@"AnnotationViewController" bundle:nil];
MKAnnotationView *annotationView1 = [[MKAnnotationView alloc] init];
annotationView1.frame = CGRectMake(0, 0, 30, 30);
annotationView1.canShowCallout = true;
MKAnnotationView *annotationView2 = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:@"annotation"];
annotationView2.image = [UIImage imageNamed:imageArray[vc.i]];
annotationView2.frame = CGRectMake(0, 0, 30, 30);
annotationView2.layer.cornerRadius = 15;
annotationView2.layer.masksToBounds = true;
[annotationView1 addSubview:annotationView2];
NSLog(@"AnnotationClass i = %d", vc.i);
return annotationView1;
}
@end
和AnnotationViewController的viewForAnnotation函数类似:
- (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[Annotation class]]) {
// Custom annotation
Annotation *customAnnotaton = [[Annotation alloc] init];
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"annotation"];
if (annotationView == nil) {
annotationView = customAnnotaton.annotation;
self.i += 1;
NSLog(@"AnnotationViewController i = : %d", self.i);
}
return annotationView;
}
return nil;
}
@end
因为我想让3个注释包括不同的图像,所以我创建了一个输入图像的数组。
当制作注释时,注释图像应该是我想要的彼此不同。所以我使用int&#34; i&#34;获取数组索引并将图像放到每个注释中:
AnnotationViewController *vc = [[AnnotationViewController alloc] initWithNibName:@"AnnotationViewController" bundle:nil];
和:
annotationView2.image = [UIImage imageNamed:imageArray[vc.i]];
获取索引并将图像设置为每个注释。
问题是,在运行应用程序时,注释图像是相同的。 我打印索引和结果:
[7783:2749915] AnnotationClass i = 0
[7783:2749915] AnnotationViewController i = 1
[7783:2749915] AnnotationClass i = 0
[7783:2749915] AnnotationViewController i = 2
[7783:2749915] AnnotationClass i = 0
[7783:2749915] AnnotationViewController i = 3
正如您所看到的那样,&#34; AnnotationClass i&#34;是从Annotation Class打印的,&#34; AnnotationViewController i&#34;是打印形式AnnotationViewController。
显然,价值&#34;我&#34;在AnnotationClass中,从AnnotationViewController调用并不是值本身。
我认为问题是在调用类时,AnnotationViewController每次都是init,所以值总是为0。
任何人都可以帮我解决问题,即如何从Class中获取AnnotationViewController的值?
答案 0 :(得分:0)
我认为问题是在调用类时,AnnotationViewController每次都是init,所以值总是为0。
完全正确!你在说:
AnnotationViewController *vc = [[AnnotationViewController alloc] initWithNibName:@"AnnotationViewController" bundle:nil];
使成为一个全新的AnnotationViewController。这大概不是你想要做的。你想要做的是将引用到已经存在的AnnotationViewController 。
答案 1 :(得分:0)
在@matt建议之后,我找到了我需要的ViewController
这样的代码:
覆盖
AnnotationViewController *vc = [[AnnotationViewController alloc] initWithNibName:@"AnnotationViewController" bundle:nil];
到
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UITabBarController *tabVc = (UITabBarController *)delegate.window.rootViewController;
ViewController *vc = (ViewController *)tabVc.viewControllers[0];
非常感谢@matt,并希望这可以帮助其他人有同样的问题:)