Методы нажатия кнопки 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
использование.