I\'ve got a modal view controller that is presented and a UITextView becomes the first responder and the keyboard is shown.
Once this screen is loaded, the user can
You can't do this using presentModalViewController:animated:
. You'll have to put your modal view in a separate UIWindow, set that second UIWindow's windowLevel to something high (like UIWindowLevelStatusBar), and animate it on and off the screen yourself. You won't need a second view controller at all.
In your XIB, make a new top-level UIWindow object. Put your second view into this window. Connect the window to an outlet on your view controller. (I called the outlet otherWindow
in my test code but overlayWindow
would be a better name. The outlet needs to be declared strong
or retain
.)
In your view controller, implement these methods:
- (IBAction)presentOverlay:(id)sender
{
CGRect frame = [UIScreen mainScreen].applicationFrame;
frame.origin.y += frame.size.height;
self.otherWindow.frame = frame;
self.otherWindow.windowLevel = UIWindowLevelStatusBar;
self.otherWindow.hidden = NO;
[UIView animateWithDuration:.25 animations:^{
self.otherWindow.frame = [UIScreen mainScreen].applicationFrame;
}];
}
- (IBAction)dismissOverlay:(id)sender
{
[UIView animateWithDuration:.25 animations:^{
CGRect frame = [UIScreen mainScreen].applicationFrame;
frame.origin.y += frame.size.height;
self.otherWindow.frame = frame;
} completion:^(BOOL completed){
self.otherWindow.hidden = YES;
}];
}
Use these to present and dismiss the overlay view.