我正在尝试将我的一个应用程序更新到 iOS7。问题是,在我的 上MKMapView
,当我点击一个图钉时,它会显示Callout
,但是当单击 时rightCalloutAccessoryView
,它不再向委托发送任何回调。因此我不能再推送详细视图了。
它在 iOS6 上运行良好,在 iOS7 上就不行了。
这是相关的代码:
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
NSString * annotationIdentifier = nil;
if ([annotation isKindOfClass:VPStation.class]) {
annotationIdentifier = @"stationAnnotationIdentifier";
}
if (!annotation) {
return nil;
}
MKPinAnnotationView * annotationView = [(MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier] retain];
if(annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationIdentifier];
annotationView.canShowCallout = YES;
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
annotationView.image = [UIImage imageNamed:@"MyAnnotationPin"];
annotationView.centerOffset = CGPointMake(-10.0f, 0.0f);
}
annotationView.annotation = annotation;
return [annotationView autorelease];
}
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
if ([view.annotation isKindOfClass:VPStation.class]) {
VPTotalDetailViewController * detailVC = [[VPTotalDetailViewController alloc] initWithStation:(VPStation *)view.annotation
andUserLocation:self.mapView.userLocation.coordinate];
[self.navigationController pushViewController:detailVC animated:YES];
[detailVC release];
}
}
根据MKAnnotationView
类参考:
如果您指定的视图也是 UIControl 类的后代,您可以使用地图视图的委托在您的控件被点击时接收通知。如果它不是从 UIControl 派生的,则您的视图负责处理其范围内的任何触摸事件。
有什么比放置我自己的UIView
子类来获得触摸并推送 detailViewController 更简单的事情吗?我应该等待Apple修复这个错误吗?我相信这是一个错误,不是吗?
提前致谢