我已在.h中添加UIViewController<MKMapViewDelegate>
并已添加
-(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");
}
答案 0 :(得分:3)
好的,你的代码中需要解决几件问题......
MKMapView代表
是nil
。为什么?因为您在MKMapView
方法中设置了viewDidLoad
的委托。但是当你查看viewDidAppear:
时,你正在分配新的MKMapView
而你没有在那里设置代理。由于在viewDidLoad
之前调用viewDidAppear:
,因此委托只是nil
=未设置。
调用超级
当您覆盖某些方法时,请阅读文档。因为您可以在viewDidAppear:
文档中找到它,例如:
您可以覆盖此方法以执行与显示视图相关的其他任务。如果重写此方法,则必须在实现中的某个时刻调用super。
MKMapView&amp; IBOutlet中强>
并且还不明白为什么MKMapView
为IBOutlet
,然后您分配新的MKMapView
并将其添加为子视图。此外,如果您的IBOutlet
确实与XIB中的MKMapView
相关联,那么最终会有两个MKMapView
,因为旧的(来自XIB)不会从超级视图中删除。
你显然搞砸了。去阅读有关UIKit的更多信息,......
答案 1 :(得分:0)
尝试使用以下内容替换viewDidAppear方法的最后几行:
CLLocationCoordinate2D coord = {.latitude = location.latitude, .longitude = location.longitude};
MKCoordinateSpan span = {.latitudeDelta = 0.2, .longitudeDelta = 0.2};
MKCoordinateRegion region = {coord, span};
[mapView setRegion:region];
MapAnnotation *addAnnotation = [[MapAnnotation alloc] initWithCoordinate:coord];
[mapView addAnnotation:addAnnotation];
[self.view addSubview:mapView];