Iphone 自定义MKAnnotationView详图索引

Iphone 自定义MKAnnotationView详图索引,iphone,ios,ipad,mkmapview,mkannotationview,Iphone,Ios,Ipad,Mkmapview,Mkannotationview,我想创建一个自定义的MKAnnotationView详图索引,如图所示。我已经测试了几种解决方案,但它们只允许定制左/右图像和标题/副标题。谁能给我一些源代码或教程链接吗 现在我不知道。请帮忙 我知道您想要一个带有自定义标注的pin 我们无法创建自定义详图索引,但可以使用完全自定义的视图创建注释。因此,诀窍是在选择第一个注释时添加第二个注释,并使第二个注释视图看起来像详图索引编号 这是用户发布的解决方案,答案是:,这反过来又基于一个来自异步解决方案的解决方案。为了便于解释,以下是来自分叉项目的一

我想创建一个自定义的MKAnnotationView详图索引,如图所示。我已经测试了几种解决方案,但它们只允许定制左/右图像和标题/副标题。谁能给我一些源代码或教程链接吗

现在我不知道。请帮忙


我知道您想要一个带有自定义标注的pin

我们无法创建自定义详图索引,但可以使用完全自定义的视图创建注释。因此,诀窍是在选择第一个注释时添加第二个注释,并使第二个注释视图看起来像详图索引编号

这是用户发布的解决方案,答案是:,这反过来又基于一个来自异步解决方案的解决方案。为了便于解释,以下是来自分叉项目的一些UML:

这是一个大难题,但也是我见过的实现自定义注释的最干净的方法

从一个NSObject“Content”类开始,该类有一个坐标、要使用的标注视图的类(在UML中是AnnotationView,但您可以创建更多并在此处进行设置),以及一个带有标题、照片url等的随机值字典。使用该类初始化MKAnnotation“Annotation”对象

为了能够从详图索引视图中推送另一个视图控制器,我使用了通知


我在顶部链接的答案包含两个实现此代码的完整项目(类名可能不同)。我有另一个使用上述UML的项目。

我在MKAnnotationView中添加了自定义UIButton。点击该按钮,我显示了带有rootViewController的popOver,其视图与上面显示的视图类似。

我知道这个问题是从2011年开始的,但对于仍在搜索中找到它的人:
在iOS 9中,您有
MKAnnotationView.detailcallaccessoryview
,它完全取代了标准的标注。

我认为这只是一个带有自定义pin的自定义视图,您真正的问题是什么?非常好的问题。。这对我也有帮助。。非常感谢Jennis.示例演示-您好,感谢您所做的精彩工作。我正在尝试创建一个注释,为什么其中有两个按钮。当我单击按钮时,调用callout视图子类的methode handleTouch。但是发件人是一个UITapGestureRecognitor,在视图属性中有注释。我希望我的按钮进入发件人。视图?这是一个众所周知的问题。还是我做错了什么?@amitgupta问一些具体的问题。在没有详细描述你的问题之前,千万不要问是否有人可以帮助你。看见
#import <MapKit/MapKit.h>
@interface Content : NSObject
@property (nonatomic,assign) CLLocationCoordinate2D coordinate;
// ...

@interface Annotation : NSObject <MKAnnotation, AnnotationProtocol>
-(id) initWithContent:(Content*)content;
// ...
- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id<MKAnnotation>)annotation 
{
    // if this is a custom annotation, delegate the implementation of the view
    if ([annotation conformsToProtocol:@protocol(AnnotationProtocol)]) {
        return [((NSObject<AnnotationProtocol>*)annotation) annotationViewInMap:mapView];
    } else {
        // else, return a standard annotation view
        // ...
    }
} 
- (id)initWithAnnotation:(CalloutAnnotation*)annotation
{
    NSString *identifier = NSStringFromClass([self class]);
    self = [super initWithAnnotation:annotation reuseIdentifier:identifier];
    if (self!=nil){
        [[NSBundle mainBundle] loadNibNamed:identifier owner:self options:nil];
        // prevent the tap and double tap from reaching views underneath
        UITapGestureRecognizer *tapGestureRecognizer = ...
    }
    return self;
}