Делегат MFMailComposeViewController не обрабатывает кнопку CANCEL

Возможный дубликат:
Действие лист не отображается при нажатии кнопки отмены MFMailComposeViewController

Я реализовал стандартную функциональность почты в своем приложении в соответствии с образцом кода, предоставленным Apple.

Я настраиваю делегата следующим образом:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;

и я реализую

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 

Нажатие кнопки «Отправить» вызывает делегата, и все работает нормально. Однако нажатие кнопки «Отмена» не вызывает делегата, а просто затемняет представление; приложение зависает тут же.

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

Любые мысли или идеи?


person user628896    schedule 29.11.2011    source источник
comment
Если делегат не вызывается для отмены, то можно подозревать, что делегат был установлен неправильно, или вы каким-то образом нарушили среду почтового контроллера, так что он принимает своего рода внутреннюю ошибку.   -  person Hot Licks    schedule 29.11.2011


Ответы (3)


Вам нужно реализовать делегат mailComposeController:didFinishWithResult:error. И в этом вы отклоняете представление, которое показывает ваше почтовое представление. Если вы открыли представление почты как modalView, то способ отклонить это -

- (void)mailComposeController:(MFMailComposeViewController*)controller 
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError*)error 
{ 
    if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]);
    [self dismissModalViewControllerAnimated:YES];
    return;
}
person Srikar Appalaraju    schedule 29.11.2011

Это может быть полезно для вас

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{   
    // Notifies users about errors associated with the interface
    switch (result)
    {
        case MFMailComposeResultCancelled:
            //NSLog(@"Result: canceled");
            break;
        case MFMailComposeResultSaved:
            //NSLog(@"Result: saved");
            break;
        case MFMailComposeResultSent:
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Result" message:@"Mail Sent Successfully" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
            [alert release];
        }
            break;
        case MFMailComposeResultFailed:
            //NSLog(@"Result: failed");
            break;
        default:
            //NSLog(@"Result: not sent");
            break;
    }
    [self dismissModalViewControllerAnimated:YES];
}
person Tendulkar    schedule 29.11.2011

Попробуйте добавить даже простой делегат:

[picker setDelegate:self];
person Andrea Mario Lufino    schedule 29.11.2011