Как добавить аннотацию в mkmapview - PullRequest
0 голосов
/ 22 марта 2012

Я создал объект person

ABRecordRef person = ABPersonCreate(); 

Я устанавливаю свойства person из моих веб-сервисов.person имеет все установленные свойства, такие как имя, фамилия, идентификатор электронной почты, номер телефона, адрес, URL и т. Д.

Я хочу загрузить вид карты с несколькими выводами, где содержится каждый конкретный выводинформация о конкретном человеке.По щелчку каждой булавки мне нужно загрузить класс ABPersonViewController каждого человека.Я не уверен, как добавить аннотацию к имеющейся у меня информации и как конкретный пин-код может содержать информацию о конкретном человеке.В этом случае человек может быть или не быть в моей адресной книге, и мне не нужно сохранять человека в моей адресной книге.Я действительно запутался в том, как это сделать.Нужна помощь.

Редактировать:

У меня есть 3 класса:

!.Web service класс: где у меня есть объект человек.2. MapView класс: куда я загружаю вид карты.3. Annotation класс: в котором есть сведения о моей аннотации.

Как я буду использовать личные записи и представлять их через ABPersonViewController.Каким должен быть мой annotation класс?

1 Ответ

1 голос
/ 22 марта 2012

Для начала я бы создал класс Person (подкласс NSObject), который также реализует протокол MKAnnotation.Вы можете создать два отдельных класса ("Person" и "PersonAnnotation"), если хотите, но в этом нет необходимости.

В классе Person вы можете объявить свои собственные свойства, связанные с личностью, такие как FirstИмя, фамилия, адрес электронной почты и т. Д., Или вы можете просто иметь ABRecordRef ivar и позволить ему хранить отдельные поля для вас.

Я бы создал запись ABPerson только тогда, когда я хочу на самом делепокажите ABPersonViewController, чтобы сохранить код, специфичный для AB, и упростить управление созданием и выпуском записи ABPerson.В любом случае, просто создание ABRecordRef не добавит его в адресную книгу.Как сказано в справочной документации ABPerson :

Записи о персонале не обязательно должны храниться в базе данных адресной книги.Вы можете использовать персональные записи как способ группировки контактной информации в памяти и представления ее пользователю, например, через контроллер персонального просмотра (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

Класс веб-сервиса создаст экземпляр Person и установит свойства.Затем класс представления карты добавит этот экземпляр непосредственно на карту (поскольку Person уже реализует MKAnnotation):

[mapView addAnnotation:person];

При касании булавки представление карты вызовет метод делегата didSelectAnnotationView.Или вы можете добавить кнопку раскрытия к сноске аннотации в viewForAnnotation и ответить на нее в методе делегата calloutAccessoryControlTapped.

Какой бы метод действия вы ни решили использовать, в этом методе вы могли бы затем создатьABRecordRef, установите его значения из объекта аннотации, а затем покажите ABPersonViewController.В обоих методах делегата объект аннотации Person можно получить с помощью:

Person *personTapped = (Person *)view.annotation;
...