mfmailcomposeviewcontroller code does not work - iphone

I had a tab view controller within which I used to call the code below and it was working fine. I removed the tab and made it a simple navigation controller, but then the same code stopped working. The mail view does not show up. The button action does nothing.
What could be wrong with below code
if ([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
mailViewController.mailComposeDelegate = self;
[mailViewController setSubject:[NSString stringWithFormat:#"test"]];
[mailViewController setMessageBody:#"" isHTML:NO];
[mailViewController setToRecipients:[NSArray arrayWithObject:#"test#test.com"]];
[self presentModalViewController:mailViewController animated:YES];
[mailViewController release];}

From your comments above, I'm pretty sure that is your reason. You can't just import the header files to get the MFMailCompose to work. You have to implement the MFMailComposeViewControllerDelegate and the methods that go along with that for it to present the mail view correctly.
Here is a link to a nice tutorial that should help you out getting the methods configured correctly.
In-App Email Tutorial

Related

instance method presentModalViewController:animated not found

I am implementing email composer in app delegate.
I am not sure why , but i am getting an warning
"instance method presentModalViewController:animated not found"
only at the appdelegate,whereas, i am using the the same method in my other viewcontroller, which works smoothly.
MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
mail.mailComposeDelegate = self;
if([MFMailComposeViewController canSendMail])
{
//Setting up the Subject, recipients, and message body.
[mail setToRecipients:[NSArray arrayWithObjects:#"abc#gmail.com",nil]];
UIImage *pic = [UIImage imageNamed:#"page0.png"];
NSData *exportData = UIImageJPEGRepresentation(pic ,1.0);
[mail addAttachmentData:exportData mimeType:#"image/jpeg" fileName:#"Picture.jpeg"];
[mail setSubject:#"dummy text"];
[mail setMessageBody:#"Please tell us what your concerns are and we will try to fix them" isHTML:NO];
//Present the mail view controller
[self presentModalViewController:mail animated:YES];
//release the mail [mail release];
}
[self presentModalViewController:mailer animated:YES]; this is giving warning and app gets crashed,when reach here.
Any suggestions.
[self presentModalViewController:mail animated:YES];
is UIViewControllers Method . Please check whether you have extended your class from UIViewController
#interface abc : UIViewController
#NiravPatel: Thanks. You gave me the clue. But i had to replace "mail" by "mailer" in my case.
So, I got it work under iOS7 with
[self presentViewController:mailer animated:YES completion:nil];
presentModalViewController is a method for UIViewController's subclass and not for appDelegate, since it do not have any view controller of itself.
What you can do is, present it to last view controller of navigation controller if you are using that
Why implement this in your app delegate. I would just make a separate view and put whatever your AppDelegate is doing on the view and then implement this code in the viewcontroller. Trying to implement code like PresentModalViewController is not possible in a AppDelegate. Just create a new view and point the app delegate to load that view on startup.
presentModalViewController:animated: won't work because that's method of UIViewController but self here is an app delegate.
Refer View Controllers link for more reference
it is because that presentModalViewController is deprecated in ios 6.so for ios 6 you have to write the method like below
[self presentViewController:mail animated:YES completion:nil];
let me know it is working or not...!!!!
Happy Coding!!!!!!

ios5: Launch email from NSObject class while inside another modal view

I have a common action sheet (in NSObject class) that is called from multiple classes. One of the actions is launching email. Everything works great when called from the first NIB loaded. However, after I switch NIBs using modal views, the email (its own modal view) will not appear in any of these (but all other actions work fine). I presume it is because they are modal views and not the viewController called by the App's delegate. I presume the "rootViewController" below is the issue. I'm stuck. Help appreciated.
-(void)SendEmail {
// all this NSObject to send emails
rootViewController = (UIViewController*)[(AppDelegate*)[[UIApplication sharedApplication] delegate] viewController];
// compose
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
//controller.mailComposeDelegate = self;
controller.mailComposeDelegate = self;
//format message
NSArray *recipientsArray = [[NSArray alloc] initWithObjects:#"support#A___.com", nil]; // email recipients must be in an array
[controller setToRecipients:recipientsArray];
[controller setSubject:[NSString stringWithFormat:#"A question about %#",stuff]];
//[controller setMessageBody:outputMutString isHTML:YES];
//send
if (controller) {
NSLog(#"email controller");
[rootViewController presentModalViewController:controller animated:YES];
}
}

Modal view not displaying properly

I am writing an iPad app and want to put an option on the home screen (root view controller) to allow users to e-mail feedback. I would like the mail to appear with the style "UIModalPresentationFormSheet". However, when I run the code, it appears full screen. What am I doing wrong? Here is the code I am using:
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
NSArray *toAddresses = [[NSArray alloc] initWithObjects:#"user#domain.com", nil];
[picker setToRecipients:toAddresses];
[toAddresses release];
[picker setSubject:#"App Feedback"];
self.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:picker animated:YES];
[picker release];
You must set the style of the viewController being presented, not on the one presenting it.. So set the property of the MFMailComposeViewController and you should be ok.
You need to set modalPresentationStyle on your new view controller, not self.

MFMailComposeViewController is not interactive

I'm using the following code in two view controllers; one, where it is triggered by pressing a button, and another, where it is triggered by tapping a table cell. In the first, it works fine.
In the second, triggered by the table-cell tap, the mail composer appears, with the fields correctly filled out, but the cursor and keyboard do not appear, so you can't actually enter anything into the mail message. (You can hit Cancel or Send without problems.) Any idea what's wrong? Thanks!
if ([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:#"Message subject"];
[picker setMessageBody:#"Sample message" isHTML:NO];
[self presentModalViewController:picker animated:YES];
[picker release];
} else {
NSLog(#"cant send mail");
}
I figured out the problem, but it's absolutely ridiculous -- probably a bug in the SDK. I was presenting the problem UIViewController with a UIModalTransitionStyleFlipHorizontal, while I was presenting the healthy UIViewController with the default transition style. Something about the UIModalTransitionStyleFlipHorizontal seems to make the presented view controller greedy to be first-responder; it won't give up first-responder status to the launched MFMailComposeViewController.

problem at opening compose mail

hi i am new to iphone. what i need id i have to open support#ensisinfo.com on button click. i need simple compose mail with to address support#ensisinfo.com how can i done this pls post some code thank u.
Use this code into your button action,
MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
[[mail navigationBar] setTintColor:[UIColor blackColor]];// Change the navigation bar color
mail.mailComposeDelegate = self;
if ([MFMailComposeViewController canSendMail]) {
[mail setToRecipients:[NSArray arrayWithObjects:#"support#ensisinfo.com",nil]];
[self presentModalViewController:mail animated:YES];
}
[mail release];
For more clarification, see my answer
Best Of Luck.
First you want to check if [MFMailComposeViewController canSendMail] is YES. If so, then you can send e-mail, otherwise, no accounts are setup.
Next you'll want to create an MFMailComposeViewController, and conform to the MFMailComposeViewControllerDelegate delegate. From there, on your MFMailComposeViewController, you will want to look at the -setSubject:, -setMessageBody:isHTML: and the -setToRecipients: methods, and finally on your "parent" view controller, -presentModalViewController:animated: to bring your compose view up for the user to send the mail, and release your MFMailComposeViewController.