Iphone 如何在mkmapview中添加注释
我已经创建了一个person对象Iphone 如何在mkmapview中添加注释,iphone,annotations,mkmapview,abpersonviewcontroller,Iphone,Annotations,Mkmapview,Abpersonviewcontroller,我已经创建了一个person对象 ABRecordRef person = ABPersonCreate(); 我从web服务设置person的属性person设置了所有属性,如名字、姓氏、电子邮件id、电话号码、地址、url等 我想加载一个带有多个pin的地图视图,其中每个特定pin保存关于特定人的信息。单击每个pin,我需要加载每个人的ABPersonViewController类。我不确定如何使用我拥有的信息添加注释,以及特定pin如何保存特定人的信息。 在这种情况下,此人可能在我的通
ABRecordRef person = ABPersonCreate();
我从web服务设置person的属性person
设置了所有属性,如名字、姓氏、电子邮件id、电话号码、地址、url等
我想加载一个带有多个pin的地图视图,其中每个特定pin保存关于特定人的信息。单击每个pin,我需要加载每个人的ABPersonViewController
类。我不确定如何使用我拥有的信息添加注释,以及特定pin如何保存特定人的信息。
在这种情况下,此人可能在我的通讯簿中,也可能不在,我不需要将此人保存在我的通讯簿中。
我真的不知道该怎么做。我需要帮助
编辑:
我有三门课:
<代码>Web服务类:我有person对象的地方。
2. <代码>地图视图类:在其中加载地图视图。
3. <代码>注释类:其中包含有关我的注释的详细信息
如何使用个人记录并通过
ABPersonViewController
显示。我的annotation
类应该是什么?我首先要做的是创建一个Person
类(NSObject的子类),该类还实现了MKAnnotation
协议。如果愿意,可以创建两个单独的类(“Person”和“PersonAnnotation”),但这不是必需的
在Person
类中,您可以声明自己与个人相关的属性,如名字、姓氏、电子邮件地址等,也可以只使用ABRecordRef
ivar,让它为您存储各个字段
当我想实际显示ABPersonViewController
时,我只会创建一个ABPerson
记录,以隔离特定于AB的代码,并更轻松地管理ABPerson
记录的创建和发布。无论如何,仅创建一个ABRecordRef
不会将其添加到通讯簿中。正如政府所说:
个人记录不一定要存储在地址簿中
数据库您可以使用人员记录作为组联系人的一种方式
内存中的信息,并通过以下方式将其呈现给用户:,
个人视图控制器(ABPersonViewController)
因此,Person
类可以如下所示:
@interface Person : NSObject<MKAnnotation>
@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;
@property (nonatomic, copy) NSString *emailAddress;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@end
@implementation Person
@synthesize firstName;
@synthesize lastName;
@synthesize emailAddress;
@synthesize coordinate;
-(NSString *)title
{
return [NSString stringWithFormat:@"%@ %@", firstName, lastName];
}
-(NSString *)subtitle
{
return emailAddress;
}
@end
当触针时,地图视图将调用didSelectAnnotationView
delegate方法。或者,您可以在注释的viewForAnnotation
中向注释的标注添加一个披露按钮,并在calloutAccessoryControlTapped
委托方法中响应该按钮
无论您决定使用哪种操作方法,都可以在该方法中创建一个ABRecordRef
,从注释对象设置其值,然后显示ABPersonViewController
。在这两种委托方法中,Person
注释对象可以通过以下方式检索:
Person *personTapped = (Person *)view.annotation;
混乱具体在哪里?您必须将人员信息存储在ABPerson中吗?当您需要实际显示ABPersonViewController时,您可以创建ABPerson。虽然您应该能够使用ABPerson ivar创建注释类。将
person
存储在ABPerson
中会自动将person
保存在电话通讯簿中吗?在我的情况下,我不需要在通讯录中保存person
,我只需要显示person
的vCard,当我在web服务类的mapview
中单击pin时,您是在创建ABPerson还是有自己的“person”类?我不认为仅仅在内存中创建一个ABPerson记录就可以将其添加到通讯簿中。我不是在创建ABPerson
,我只是拥有person
记录。我使用ABRecordSetValue
将属性设置为person
。在这种情况下,我是否应该子类化ABPerson
。我的注释类应该是什么样的。我还有一个问题。如何将ABRecordref
作为方法的参数传递。在中,搜索nameForSource
方法作为示例。我得到以下警告将'ABRecordref'(又名'const void*)发送到'ABRecordref*'(又名'const void**')类型的参数将丢弃方法参数中的限定符,不要将其声明为(ABRecordRef*)
。只需将其声明为(ABRecordRef)
。注意示例应用程序中的方法声明:-(NSString*)nameForSource:(ABRecordRef)source
OK。我的错。我试图将“ABRecordRef”作为对象传递。现在一切都好了。
Person *personTapped = (Person *)view.annotation;