我试图模仿Apple的股票地图应用程序中MKMapView标注的行为。
以下是我到目前为止的情况:我理解当您将Apple的UIButtonTypeDetailDisclosure作为附件视图添加到标注时,整个标注将自动变为可点击以及附件。但是,我不喜欢Apple的详细信息披露按钮是一个巨大的'i',所以我制作了一个UIButtonTypeCustom类型的自定义按钮,并添加了一个TableViewCell作为子视图,以便正确的配件视图与库存地图中的一个完全相同。应用程序。它是可点击的,并成功执行到我的详细视图控制器的segue。
这里的问题是只有小配件是可点击的,并且TouchDown事件没有像地图应用程序中那样的视觉反馈。我想要实现的是MKAnnotationView标注能够转换到我的细节视图,并在TouchDown时使背景变暗。我在这里四处搜索,找不到这样做的方法。有什么想法吗?
这是我自定义MKAnnotationView的地方:
// Try to dequeue an existing pin view first.
MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"OpenCustomPinAnnotationView"];
if (!pinView)
{
// If an existing pin view was not available, create one.
pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"OpenCustomPinAnnotationView"];
pinView.pinColor = MKPinAnnotationColorGreen;
//pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
pinView.userInteractionEnabled = YES;
UIImageView *iconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"dollarsmall"]];
pinView.leftCalloutAccessoryView = iconView;
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
UITableViewCell *disclosure = [[UITableViewCell alloc] init];
[rightButton addSubview:disclosure];
rightButton.frame = CGRectMake(0, 0, 25, 25);
disclosure.frame = CGRectMake(0, 0, 25, 25);
disclosure.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
disclosure.userInteractionEnabled = NO;
pinView.rightCalloutAccessoryView = rightButton;
} else {
pinView.annotation = annotation;
}
return pinView;
}
以下是我处理披露信息的方式:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
[self performSegueWithIdentifier:@"CPPMapDetailViewSegue" sender:self];
}
答案 0 :(得分:0)
我遇到了你遇到的完全相同的问题。我找了几个小时,一无所获!
我刚发现这个,它就像一个魅力:https://stackoverflow.com/a/22322591
我只使用前两行:创建DetailDisclosure按钮并设置图像。我能够使用我的自定义图像,它的工作方式与标准的DetailDisclosure一样,使用了" i"图标。