У моего приложения есть общий класс, который отображает actionSheet при каждом нажатии «Связаться с нами» на любом из множества NIB.
Если пользователь выберет «Отправить нам по электронной почте» из всплывающего окна actionSheet, я бынравится вызывать методы электронной почты из того же общего класса.После исследования я реализовал это:
-(void)SendEmail {
rootViewController = (UIViewController*)
[(AppDelegate*)[[UIApplication sharedApplication] delegate] viewController];
// compose
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = rootViewController;
//format message
NSArray *recipientsArray = [[NSArray alloc] initWithObjects:@"support@somename.com", nil];
[controller setToRecipients:recipientsArray];
[controller setSubject:[NSString stringWithFormat:@"A question about %@",string]];
[controller setMessageBody:outputMutString isHTML:YES];
//send
if (controller) [rootViewController presentModalViewController:controller animated:YES];
}
// didFinishWithResult
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error;{
if (result == MFMailComposeResultSent) {
}
[rootViewController dismissModalViewControllerAnimated:YES];
}
Это запустит новое электронное письмо, однако:
DidFinishWithResultне работает, так как модальное представление не удаляется ни после отправки электронного письма, ни после нажатия кнопки «Отмена»
Я получаю это предупреждение: присваивание «id» из несовместимого типа «UIViewController *»__strong 'controller.mailComposeDelegate = rootViewController;
Помощь приветствуется.