gpt4 book ai didi

ios - 注释标注 View 没有响应

转载 作者:行者123 更新时间:2023-11-29 12:50:57 25 4
gpt4 key购买 nike

我正在尝试在 mapView 上显示注释。所有注释都来自 JSON 对象。他们分为三组。用户可以通过在 segmentedIndex 控件上选择一个选项来选择应该显示哪些注释。

至于现在,应用程序按预期工作,用户从 segmentedIndex 控件中选择一个选项,并且注释显示在 mapView 上。

我当前的问题是我需要用户单击标注 View 以打开另一个 viewController。

我认为我的代码是正确的,但我想它不是那么显示的标注 View 是默认的标注 View ,带有标题和副标题。单击它时不会触发任何操作。

欢迎任何帮助。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {

static NSString *identifier = @"MyLocation";
if ([annotation isKindOfClass:[PlaceMark class]]) {

MKPinAnnotationView *annotationView =
(MKPinAnnotationView *)[myMapView dequeueReusableAnnotationViewWithIdentifier:identifier];

if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc]
initWithAnnotation:annotation
reuseIdentifier:identifier];
} else {
annotationView.annotation = annotation;
}

annotationView.enabled = YES;
annotationView.canShowCallout = YES;

// Create a UIButton object to add on the
UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
[annotationView setRightCalloutAccessoryView:rightButton];

UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
[leftButton setTitle:annotation.title forState:UIControlStateNormal];
[annotationView setLeftCalloutAccessoryView:leftButton];

return annotationView;
}

return nil;
}
- (void)mapView:(MKMapView *)mapView
annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {

if ([(UIButton*)control buttonType] == UIButtonTypeDetailDisclosure){
// Do your thing when the detailDisclosureButton is touched
UIViewController *mapDetailViewController = [[UIViewController alloc] init];
[[self navigationController] pushViewController:mapDetailViewController animated:YES];

} else if([(UIButton*)control buttonType] == UIButtonTypeInfoDark) {
// Do your thing when the infoDarkButton is touched

NSLog(@"infoDarkButton for longitude: %f and latitude: %f",
[(PlaceMark*)[view annotation] coordinate].longitude,
[(PlaceMark*)[view annotation] coordinate].latitude);
}
}

最佳答案

很可能 map View 的 delegate 没有设置,在这种情况下它不会调用 viewForAnnotation 而是创建一个默认 View (带有标注的红色图钉仅显示标题和副标题——没有按钮)。

头文件中的声明没有设置 map View 的delegate。这只是告诉编译器这个类打算实现某些委托(delegate)方法。

在 xib/storyboard 中,右键单击 map View 并将 delegate 导出连接到 View Controller ,或者在 viewDidLoad 中,将 mapView. delegate = self;.


不相关,但我想指出,在 calloutAccessoryControlTapped 中,您可能只想知道它是正确的,而不是检查 buttonType 向左 按钮,这样就可以:

if (control == view.rightCalloutAccessoryView) ... 

参见 https://stackoverflow.com/a/9113611/467105一个完整的例子。

检查 buttonType 至少有两个问题:

  • 如果您想对两个按钮使用相同的类型(例如自定义)怎么办?
  • 在 iOS 7 中,将按钮设置为 UIButtonTypeDetailDisclosure 实际上会创建一个 Info 类型的按钮(详情请参阅 MKAnnotationView always shows infoButton instead of detailDisclosure btn)。因此,对 buttonType UIButtonTypeDetailDisclosure 的检查将失败(在 iOS 7 上)。

关于ios - 注释标注 View 没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22446204/

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