Настраиваемое действие после отмены ABPeoplePickerNavigationController - PullRequest
1 голос
/ 04 июня 2009

Я представляю ABPeoplePickerNavigationController пользователю и прошу его выбрать контакт. После того как они выберут пользователя, я хочу, чтобы его отправляли либо в приложение «Сообщения», либо в приложение «Электронная почта», в зависимости от того, какое свойство они выбрали. Тем не менее, я не могу понять, как настроить действие, которое происходит после того, как модальный сборщик уволен.

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
    if(property == kABPersonPhoneProperty){
        [self dismissModalViewControllerAnimated:YES];
        NSString* phoneNumber = (NSString *)ABRecordCopyValue(person, property);
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"sms:%@", phoneNumber]];
        [[UIApplication sharedApplication] openURL:url];
        [phoneNumber release];
        return NO;
    }

    if(property == kABPersonEmailProperty){
        [self dismissModalViewControllerAnimated:YES];
        NSString* emailAddress = (NSString *)ABRecordCopyValue(person, property);
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"mailto:%@", emailAddress]];
        [[UIApplication sharedApplication] openURL:url];
        [emailAddress release];
        return NO;
    }
    return YES;
}

Итак, как мне это сделать? Спасибо!

Ответы [ 4 ]

2 голосов
/ 05 июня 2009

Вам нужно просто реализовать метод делегата

   - (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifierForValue

В реализации просто верните YES (если вам не нужно обрабатывать выбранное свойство). Затем, если пользователь коснулся телефонного номера, ваше приложение начнет звонить по этому номеру. Точно так же, если пользователь коснулся адреса электронной почты, приложение переключится на представление составления электронной почты по умолчанию.

Не забудьте назначить себя делегатом, иначе не будет вызван метод:

ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
peoplePicker.peoplePickerDelegate = self;
[self presentModalViewController:peoplePicker animated:YES];

И, наконец, поместите ABPeoplePickerNavigationControllerDelegate в раздел протокола заголовочного файла вашего контроллера.

ПРИМЕЧАНИЕ: вы должны проверить это на устройстве, а не на симуляторе.

0 голосов
/ 13 января 2012

Просто верните NO / FALSE / false в

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier

и написать код в той же функции для обработки контактов

0 голосов
/ 05 июня 2009

решаемая. Проблема была не в методах делегатов. Это было то, что NSURL, который я создаю, недействителен. Чтобы запустить приложение SMS / сообщения с выбранным номером телефона, пользователь смс: // ... ключ // ! Документы, кажется, указывают смс: как правильный формат, но я обнаружил, что это неверно.

0 голосов
/ 05 июня 2009

Вы можете создать собственный протокол с двумя методами (скажем, pickPhone и pickMail), и класс, вызывающий этот, реализует эти подпрограммы и назначит себя в качестве делегата. Как только решение принято, вы проверяете, определен ли делегат, затем вызываете правильный метод и позволяете вызывающей стороне определить, что с ним делать.

Кроме того, вы должны провести некоторое тестирование по URL-адресу "sms". В последний раз я проверял, что оно запускает приложение SMS, но ничего не передает ему.

Но до того, как вы это сделаете, то, как вы сейчас это делаете, вызывая эти openURL для вызова внешних приложений для телефона или электронной почты, ваше приложение будет остановлено, и управление будет передано этим приложениям. Поэтому я не уверен, почему вас волнует, что произойдет после того, как пользователь отклонит модальное средство выбора, потому что ваше приложение больше не будет рядом.

Теперь под OS 3.0 у вас могут быть некоторые опции, но все же ... вы можете пересмотреть проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...