Композитор сообщений SMS: не отображается

У меня есть UITableViewController, представляющий список контактов, когда пользователь выбирает строку, он показывает UIActionSheet, чтобы попросить пользователя о действии (вызов, отправить смс...).

Пользователь выбирает действие, и этот первый UIActionSheet покажет другой UIActionSheet, который содержит номера телефонов.

Пользователь выбирает номер телефона, и это должно показать SMS-сообщение композитора.

Проблема заключается в том, что когда пользователь выбирает номер телефона, представление компоновщика сообщений не отображается (просто черный экран), и я получаю MessageComposeResultCancelled в didFinishWithResult объекта MFMessageComposeViewController.

Который генерирует это предупреждение "Предупреждение: попытка уволить из контроллера представления, в то время как презентация или увольнение в процессе!

Как правильно позвонить композитору и показать SMS-сообщение?

(это прекрасно работает, если я вызываю его напрямую, когда пользователь выбирает строку в списке с помощью didSelectRowAtIndexPath)

Вот некоторый код:

1 - вызов первого UIActionSheet в методе didSelectRowAtIndexPath:

UIActionSheet *popupQuery;
...
[popupQuery showInView:self.view];

2 - вызов второго UIActionSheet в методе clickedButtonAtIndex:

UIActionSheet *popupQuery2;
...
[popupQuery showInView:self.view];

3 - из того же метода, вызов к составителю сообщения:

[self sendSMS:@"" recipientList:[phoneNumbers objectAtIndex:buttonIndex]];

метод, который показывает составителю сообщения:

    (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
    if([MFMessageComposeViewController canSendText])
    {
        controller.body = bodyOfMessage;
        controller.recipients = recipients;
        controller.messageComposeDelegate = self;

        [self presentModalViewController:controller animated:YES];
    }
}

2 ответа

Решение найдено здесь: MFMessageComposeViewController показывает пустой / белый экран

    controller.recipients = [NSArray arrayWithObject:theRecipients];

theRecipients - это массив, содержащий только один элемент (выбранный номер телефона)

Поскольку вы не хотите показывать два модальных элемента управления одновременно, используйте actionSheet:didDismissWithButtonIndex: метод делегата, так что лист действий скрыт, когда вы начинаете показывать контроллер обмена сообщениями.

Следующий код показывает композитор, который не отменяется автоматически. я могу видеть 0 в журнале, который является значением MessageComposeResultCancelled, только когда я нажимаю Cancel кнопка. Вы пытаетесь взломать, нажав send кнопка автоматически?

композитор из списка действий делегата

MFMessageComposeViewController.h

enum MessageComposeResult {
    MessageComposeResultCancelled, //0
    MessageComposeResultSent,      //1
    MessageComposeResultFailed     //2
};

MyViewController.m

-(IBAction)onButtonPressed:(id)sender {
    UIActionSheet * sheet = [[UIActionSheet alloc] initWithTitle:@"Title"
                                                        delegate:self
                                               cancelButtonTitle:@"Go out"
                                          destructiveButtonTitle:@"Show message composer"
                                               otherButtonTitles:nil, nil];
    [sheet showInView:self.view];
}

-(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
    if([MFMessageComposeViewController canSendText])
    {
        controller.body = @"body";
//        controller.recipients = recipients;
        controller.messageComposeDelegate = self;

        [self presentModalViewController:controller animated:YES];
    }
}

-(void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
    NSLog(@"%d", result);
    [controller dismissModalViewControllerAnimated:YES];
}
Другие вопросы по тегам