gpt4 book ai didi

iphone - MKAnnotation viewForAnnotation 从未被调用

转载 作者:行者123 更新时间:2023-12-03 20:51:52 26 4
gpt4 key购买 nike

我已经添加UIViewController<MKMapViewDelegate>在 .h 中并已添加

 -(void) viewDidLoad {
self.mapView.delegate = self;
}

但是 viewForAnnotation 方法从未被调用

MapViewController.h

   #import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface Tela1ViewController : UIViewController<MKMapViewDelegate> {
IBOutlet MKMapView *mapView;
}

@property (nonatomic, retain) MKMapView *mapView;
@end

MapViewController.m

  -(void) viewDidLoad {
self.mapView.delegate = self;
}

- (void)viewDidAppear:(BOOL)animated
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication shared

mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
mapView.mapType = MKMapTypeSatellite;

CLLocationCoordinate2D coord = {latitude: appDelegate.latitude, longitude: appDelegate.longitude};
MKCoordinateSpan span = {latitudeDelta:0.2, longitudeDelta: 0.2};
MKCoordinateRegion region = {coord, span};

[mapView setRegion:region];

PlaceMark *addAnnotation = [[PlaceMark alloc] initWithCoordinate:coord];
[mapView addAnnotation:addAnnotation];
[self.view addSubview:mapView];
}

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
NSLog(@"test");
}

最佳答案

好的,代码中需要修复一些问题......

MKMapView的委托(delegate)

nil。为什么?因为您在 viewDidLoad 方法中设置了 MKMapView 的委托(delegate)。但是,当您查看 viewDidAppear: 时,您正在分配新的 MKMapView 并且没有在那里设置委托(delegate)。并且由于 viewDidLoadviewDidAppear: 之前调用,因此委托(delegate)只是 nil = 未设置。

调用 super

当您重写某些方法时,请阅读文档。因为您可以在 viewDidAppear: 文档中找到此内容,例如:

您可以重写此方法来执行与呈现 View 相关的其他任务。如果您重写此方法,则必须在实现中的某个时刻调用 super。

MKMapView 和 IBOutlet

而且也不明白为什么你有 MKMapView 作为 IBOutlet 然后你分配新的 MKMapView 并将其添加为 subview 。此外,如果您的 IBOutlet 确实连接到 XIB 中的 MKMapView ,您最终会得到两个 MKMapView ,因为旧的 (来自 XIB)不会从 super View 中删除。

你显然把事情搞砸了。去阅读更多关于 UIKit 的内容,...

关于iphone - MKAnnotation viewForAnnotation 从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879044/

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