我正在处理一个奇怪的问题……我有一个非常基本的 mkmapview,我将其拖到 mainviewcontrollers View 中。我在 map 上显示了非常基本的注释。当我使 mainviewcontroller 成为 mapview 的委托(delegate)(在 IB 或代码中)时,注释停止显示。如果我不建立这种联系,注释会按预期出现……有什么想法吗?
#import "GDFlipsideViewController.h"
#import <MapKit/MapKit.h>
@interface GDMainViewController : UIViewController <MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet UIToolbar *bottomToolbar;
@property (strong, nonatomic) IBOutlet MKMapView *theMap;
@property (strong, nonatomic) MKLocalSearchResponse *results;
@property (strong, nonatomic) MKLocalSearchRequest *request;
@property (strong, nonatomic) MKLocalSearch *search;
- (IBAction)locateHelp:(UIBarButtonItem *)sender;
@end
...
@implementation GDMainViewController
...
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
static NSString *AnnotationViewID = @"annotationViewID";
GDHelpAnnotationView *annotationView = (GDHelpAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
if (annotationView == nil){
annotationView = [[GDHelpAnnotationView alloc]init];
}
annotationView.annotation = annotation;
return annotationView;
}
...
- (IBAction)locateHelp:(UIBarButtonItem *)sender {
[self searchForHelp];
}
..
- (void)searchForHelp {
// drop pins for emergency destination
[self searchForFireStations];
[self searchForPoliceStations];
[self searchForHospitals];
}
...
- (void)searchForFireStations {
//Fire stations
[_request setNaturalLanguageQuery:@"fire station"];
[_request setRegion:[_theMap region]];
_search = [[MKLocalSearch alloc]initWithRequest:_request];
[_search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
if ([response.mapItems count] == 0) {
if ([response.mapItems count] == 0) {
//will handle later
return;
}
}
[response.mapItems enumerateObjectsUsingBlock:^(MKMapItem *item, NSUInteger idx, BOOL *stop) {
GDHelpAnnotation *annotation = [[GDHelpAnnotation alloc] initWithPlacemark:item.placemark];
annotation.title = item.name;
annotation.subtitle = [item name];
[_theMap addAnnotation:annotation]; // This gets called but doesnt show annotations when self is _theMap's delegate
}];
}];
}
最佳答案
如果 viewForAnnotation
在您设置委托(delegate)时被调用,但引脚没有出现,则故障可能出在 GDHelpAnnotationView
上。您可以通过将 viewForAnnotation
替换为使用常规旧 MKPinAnnotationView 的更基本的 View 来测试这一点。
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
static NSString *AnnotationViewID = @"annotationViewID";
MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
if (annotationView == nil)
{
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
} else {
annotationView.annotation = annotation;
}
return annotationView;
}
关于ios - 将 MainViewController 设置为 MKMapView 的委托(delegate)时不会出现注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15104420/