Методы нажатия кнопки UIAlertView

В моем компоновщике электронной почты я хотел бы для результата 'cancelbuttonclicked' закрыть MFMailComposerViewController. Могу ли я реализовать в инструкции switch или сделать это должны быть отдельными методами. Кроме того, я хотел бы, чтобы кнопка отправки отправляла сообщение перед тем, как уволить.

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    switch (result) {
        case MFMailComposeResultSent:{
            UIAlertView *messageSent = [[UIAlertView alloc] initWithTitle:@"Message Sent" message:@"Your message has been sent" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [messageSent show];
        break;
        }
        case MFMailComposeResultSaved:{
            UIAlertView *messageComposeResultSaved = [[UIAlertView alloc] initWithTitle:@"Message Saved" message:@"Your message has been saved" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [messageComposeResultSaved show];
            break;
        }
        case MFMailComposeResultCancelled:{
            UIAlertView *messageComposeResultCancelled = [[UIAlertView alloc] initWithTitle:@"Message Cancelled" message:@"Your message has been cancelled" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [messageComposeResultCancelled show];
            break;}

        case MFMailComposeResultFailed:{
             UIAlertView *messageFailed = [[UIAlertView alloc]initWithTitle:@"Message Failed" message:@"Your message could not be sent" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [messageFailed show];
            break;
        }
    }
}

1 ответ

Ваш код должен работать нормально. Там нет никаких ограничений на использование UIAlertView внутри switch, Однако, чтобы сделать его немного менее запутанным, я бы предложил переписать его так:

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    NSString *alertTitle = nil;
    NSString *alertMessage = nil;
    switch (result) {
        case MFMailComposeResultSent:{
            alertTitle = @"Message Sent";
            alertMessage = @"Your message has been sent";
        break;
        }
        case MFMailComposeResultSaved:{
            alertTitle = @"Message Saved";
            alertMessage = @"Your message has been saved";
            break;
        }
        case MFMailComposeResultCancelled:{
            alertTitle = @"Message Cancelled";
            alertMessage = @"Your message has been cancelled";
            break;}

        case MFMailComposeResultFailed:{
             alertTitle = @"Message Failed";
             alertMessage = @"Your message could not be sent";
            break;
        }
    }
    [[[UIAlertView alloc] initWithTitle:alertTitle 
                                message:alertMessage
                               delegate:self
                      cancelButtonTitle:@"OK"
                      otherButtonTitles:nil] show];
}

Это позволяет избежать нескольких initWithTitle...,

Но есть еще одна проблема: UIAlertView не рекомендуется iOS 8. Вы должны использовать UIAlertController вместо. Этот ответ имеет пример UIAlertController использование.

Другие вопросы по тегам