I am trying to send email from within my iOS app.
The idea is to have one class SendMessage
which all classes use to send email from within the app. It is a subclass of NSObject
and is a MFMailComposeViewControllerDelegate
This is what the SendMessage class looks like
@implementation SendMessage
- (void) sendEmailFromViewController : (UIViewController *)viewController withSubject : (NSString *) subject withRecipient : (NSString *)recipient withMessage : (NSString *)message withCompletionBlock : (void(^)(void))completionBlock withFailure : (void(^)(void))failure {
self.viewController = viewController;
if (![MFMailComposeViewController canSendMail]){
if (failure)
failure();
}
else {
MFMailComposeViewController *messageController = [[MFMailComposeViewController alloc] init];
messageController.mailComposeDelegate = self.viewController;
[messageController setSubject:subject];
[messageController setToRecipients:[NSArray arrayWithObject:recipient]];
[messageController setMessageBody:message isHTML:NO];
[self.viewController presentModalViewController:messageController animated:YES];
}
}
-(void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
[self.viewController dismissViewControllerAnimated:YES completion:nil];
}
@end
I am trying to call the class using:
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 3) {
SendMessage *sendFeedback = [[SendMessage alloc] init];
[sendFeedback sendEmailFromViewController:self withSubject:@"App Feedback" withRecipient:@"[email protected]" withMessage:@"This is app feedback" withCompletionBlock:nil withFailure:nil];
}
}
The problem is that although I am able to send the email, the delegate method is not being called. How do I fix it ?
Your delegate is the UIViewController
, so implement the mailComposeController:didFinishWithResult:error
delegate method there.