i'm new with iPhone developpement and i try to lunch a UIviewController when the user pressed a button witch will allow the user too send an email.
So my AppControler is a NSObject witch contains a UIWindow and a UIViewController* myViewController
When i detect the click on the button i create this:
MFMailComposeViewController *picker =
[[MFMailComposeViewController alloc] initWithNibName:#"MainWindow"
bundle:nil];
picker.mailComposeDelegate = myViewController;
... set the mail
and then when i try to present the view controller with this
[myViewController presentModalViewController:picker animated:YES];
[picker release];
Nothing append..
i know it's simple but i cant figured it out what is wrong.
thanks
Try using:
[self presentModalViewController:picker animated:YES];
As #dannywartnaby mentioned unless myViewController points to the current view controller (self) it won't work.
Related
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!!!!!!
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];
}
}
I am trying to navigate from one page to another on a button click in a facebook appliaction.
I am using
registerUser=[[RegisterPage alloc]initWithNibName:#"RegisterPage" bundle:nil];
[self presentModalViewController :registerUser animated:YES];
for presenting the next view after getting response from facebook.
But it is not showing the next view. It works fine in all other places where I used to present other views.
Anyone have idea about this issue?
What exactly is 'self' here? Is it a viewcontroller? Or just a UIView?
I think this'll only work if self is a viewcontroller or some subclass of it.
My code to present a view controller is somewhat like yours (without a nib):
ViewController *controller = [[ViewController alloc] initWithNibName:nil bundle:nil];
[controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentModalViewController:controller animated:YES];
[controller release];
And to present a navigation controller it's like this (without a nib):
ViewController *controller = [[ViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
[navController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentModalViewController:navController animated:YES];
[navController release];
[controller release];
Sometimes simply copying someones code helps.
thanks for everyones reply.i have solved it after a long fight.i just dismissed the view before pesenting the next view and set dismissmodalviewcontrollerAnimated to NO.[self dismissModalViewControllerAnimated:NO];
nextview = [[LoginPage alloc]initWithNibName:#"LoginPage" bundle:nil];
[self presentModalViewController: nextview animated:YES];hope this help someone like me
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.
I'm having difficulty in switching between xibs :(
first i was using navigationController and it worked well but i want to do it without using navigationController.
I tried presentModalViewController but it crashes my application. :((
Here is the code :
myViewController *viewController = [myViewController alloc] initWithNibName:nil bundle:nil];
myViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController: myViewController animated:YES];
[myViewController release];
It is not working, ERROR received :
GDB:Program received signal : "EXC_BAD_ACCESS"
myViewController *viewController = [myViewController alloc] initWithNibName:nil bundle:nil];
viewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController: viewController animated:YES];
this should work. your problem was that you declared a view controller and named it "viewController", but you were not using that. you were using the view controllers name, not the declared instance.
You have set your nibName to nil
Enter the name of your Xib file you want to display there
Like
myViewController *viewController = [[myViewController alloc] initWithNibName:#"nameOfYourXIB" bundle:nil]autorelease];
myViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController: myViewController animated:YES];
remove the release statement from ur code and everything will work fine.
Actually u r releasing the viewcontroller before it is shown as the superview.
//[myViewController release];
Hope this helps u...
Don't release he controller its a global variable i suppose so just make it in nil in dealloc