如何使用自定义按钮设置MKAnnotationView标注?

时间:2014-09-09 04:33:40

标签: objective-c ios7 mapkit mkannotation mkannotationview

我试图模仿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];
}

1 个答案:

答案 0 :(得分:0)

我遇到了你遇到的完全相同的问题。我找了几个小时,一无所获!

我刚发现这个,它就像一个魅力:https://stackoverflow.com/a/22322591

我只使用前两行:创建DetailDisclosure按钮并设置图像。我能够使用我的自定义图像,它的工作方式与标准的DetailDisclosure一样,使用了" i"图标。