I have my 'shake' working fine (using motionEnded), based off of Apple's GLPaint code. When the user shakes the device (running 3.0 and up) I want to open a view controller modally using presentModalViewController.
In my appdelegate I have the notification (as per the GLPaint sample code):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeToOpenHiddenScreen) name:@"shake" object:nil];
In my shakeToOpenHiddenScreen I just want to open view 'x' modally but I don't think 开发者_Python百科that my appdelegate will respond to presentModalViewController.
Is there a way around this?
To use presentModalViewController you have to use it from a UIViewController class, or subclass:
For example: //RootViewController.m [self.navigationController presentModalViewController:loginRegView animated:YES];
You can way around this problem by defining a navigation controller into your app delegate:
//yourApp_comAppDelegate.h
UINavigationController *nav;
...
@property(nonatomic,retain) UINavigationController *nav;
and synthesize it
@syntetize nav;
To use presentModalViewController you have to use it from a UIViewController class, or subclass:
For example:
//RootViewController.m
[self.navigationController presentModalViewController:loginRegView animated:YES];
You can way around this problem by defining a navigation controller into your app delegate:
//yourApp_comAppDelegate.h
UINavigationController *nav;
...
@property(nonatomic,retain) UINavigationController *nav;
synthesize it
//yourApp_comAppDelegate.m
@synthesize nav;
and now you can use the method:
//yourApp_comAppDelegate.m
[nav presentModalViewController:yourView animated:YES];
but, first you have to assign it somewhere, i will do it in the RootViewController
//RootViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
app = (yourApp_comAppDelegate *) [[UIApplication sharedApplication] delegate];
app.nav = self.navigationController
}
It should work, let me know :)
It is a method on UIViewController, so you should either have access to a saved view controller from your appDelegate, or else set up the notification to call one (addObserver:someVC).
"shake" isn't a standard notification name, so there should be some code elsewhere in your app that posts this notification, presumably also copied from the GLPaint sample.
精彩评论