Представление MFMessageComposeViewController, как только пользователь выбирает контакт из ABPeoplePickerNavigationController

Я работаю над приложением, которое позволяет пользователю выбирать контакт из адресной книги телефона и показов, которые связываются в UITableView. Я использую следующий код, чтобы взять контакт;

-(IBAction)pickPhoneContacts:(id)sender //opens phone's address book
{
   ABPeoplePickerNavigationController *picker =

   [[ABPeoplePickerNavigationController alloc] init];

   picker.peoplePickerDelegate = self;

   [self presentViewController:picker animated:YES completion:nil];

}

  //called when user presses the cancel button in the Address book view controller
  - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController*)peoplePicker

 {
    [self dismissViewControllerAnimated:YES completion:nil];
 }


   //called when user pics up a contact from the phone's address book

   - (BOOL)peoplePickerNavigationController:

  (ABPeoplePickerNavigationController *)peoplePicker

  shouldContinueAfterSelectingPerson:(ABRecordRef)person {


  [self displayPerson:person]; //calls displayPerson:(ABRecordRef)person to show contact's information in the app

  [self dismissViewControllerAnimated:YES completion:NULL];

   return NO;
}


//called when the user selects the property of the contact. This method will not be called in the  app but included to complete the implementation of the protocol


- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)

peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person

 property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
 {
   return NO;
 }

   //Displays the contact name and the contact's primary number in the app's text fields (add contact view controller)
 - (void)displayPerson:(ABRecordRef)person
 {
    NSString* name = (__bridge_transferNSString*)ABRecordCopyValue(person,kABPersonFirstNameProperty); //Extracts the contact's first name from address book & assigns it to a string value


  self.contactNameTextFiled.text = name;

  NSString* phone = nil;

  //Extracts the first phone number among multiple contact numbers from address book & assigns it to a string value
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,kABPersonPhoneProperty);

if (ABMultiValueGetCount(phoneNumbers) > 0)
{
    phone = (__bridge_transfer NSString*)

    ABMultiValueCopyValueAtIndex(phoneNumbers, 0);

}
else
{
    phone = @"[None]";
}

self.primaryNumberTextField.text = phone;

CFRelease(phoneNumbers);

}

Теперь задача, как только пользовательские рисунки контакт из адресной книги, ABPeoplePickerNavigator должен отклонить, и немедленно MFMessageComposeViewController должен подарить сообщение по умолчанию и выбранный контактный номер. Так, чтобы пользователь приложения послал сообщение в выбранный контактный номер. Я использовал следующий код для сообщения, составляют контроллер представления;

-(void)sendSMS
{
   MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
   if([MFMessageComposeViewController canSendText])
   {
      controller.body = @"Test Message";
      controller.recipients = [NSArray arrayWithObjects:@"111222333", nil];
      controller.messageComposeDelegate = self;
       [self presentViewController:controller animated:YES completion:nil];

   }

}

Теперь, пожалуйста, помогите мне, где я должен назвать этот метод так, чтобы MFMessageComposeViewController представил, как только ABPeoplePickerNavigationController отклоняют.

2
nl ja de
Я назвал этот метод от - (BOOL) peoplePickerNavigationController: (ABPeoplePickerNavigationController *) peoplePicker shouldContinueAfterSelectingPerson: (ABRecordRef) человек {[сам displayPerson:person];//называет displayPerson: (ABRecordRef) человек, чтобы показать contact' s информация в приложении [сам dismissViewControllerAnimated:YES completion:NULL]; возвратитесь НЕТ;}, но компилятор дает ошибку, что вы пытаетесь представить диспетчера представления, прежде чем другой диспетчер отклонил.
добавлено автор user1940888, источник

4 ответы

Используйте новую функцию dismissViewControllerAnimated: завершение: таким образом, после требования завершения посылают SMS, поскольку я отредактировал ваш код.

- (BOOL)peoplePickerNavigationController:

  (ABPeoplePickerNavigationController *)peoplePicker

  shouldContinueAfterSelectingPerson:(ABRecordRef)person {


  [self displayPerson:person]; //calls displayPerson:(ABRecordRef)person to show contact's information in the app

//  [self dismissViewControllerAnimated:YES completion:NULL];
    [self dismissViewControllerAnimated:YES completion:^{
        [self sendSMS];
    }];

   return NO;
}
1
добавлено

Попробуйте в

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person;

звонить

-(void)sendSMS

в dismissViewControllerAnimated:completion: укладчик завершения.

[self dismissViewControllerAnimated:YES completion:{[self sendSMS]}];

Надежды это помогает.

0
добавлено

Анимация набора вашего adresscontroller к No, когда вы отклоняете его

    [self dismissViewControllerAnimated:NO completion:nil];
0
добавлено

в.h файле

MFMessageComposeViewController *диспетчер;

ABPeoplePickerNavigationController *сборщик;

и в.m просто делают это

в - (пустота) sendSMS { //другой код

 [picker presentViewController:controller animated:YES completion:nil];

}

0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.