summaryrefslogtreecommitdiff
path: root/MobileCydia.mm
diff options
context:
space:
mode:
authorGrant Paul <chpwn@chpwn.com>2011-02-09 16:29:49 -0800
committerGrant Paul <chpwn@chpwn.com>2011-02-09 16:29:49 -0800
commitbfb45dcbb4f1be1b8d4e10cc28a746be75d4a76c (patch)
tree66b55bf4973723867a484dfb6ccf56d8a101b9a0 /MobileCydia.mm
parent9d67f1f439da2a541270568b1a8308b97d108e77 (diff)
Properly resize search view when keyboard is shown. Yes, really, this is the correct way to do this on pre-3.2: I did not make up this insanity.
Diffstat (limited to 'MobileCydia.mm')
-rw-r--r--MobileCydia.mm64
1 files changed, 63 insertions, 1 deletions
diff --git a/MobileCydia.mm b/MobileCydia.mm
index 75e6c28..0df74e6 100644
--- a/MobileCydia.mm
+++ b/MobileCydia.mm
@@ -5588,7 +5588,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
UITableView *list_;
NSMutableArray *index_;
NSMutableDictionary *indices_;
- SEL action_;
NSString *title_;
}
@@ -5615,6 +5614,69 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
[list_ deselectRowAtIndexPath:[list_ indexPathForSelectedRow] animated:animated];
}
+- (void) resizeForKeyboardBounds:(CGRect)bounds duration:(NSTimeInterval)duration curve:(UIViewAnimationCurve)curve {
+ CGRect base = [[self view] bounds];
+ base.size.height -= bounds.size.height;
+ base.origin = [list_ frame].origin;
+
+ [UIView beginAnimations:nil context:NULL];
+ [UIView setAnimationBeginsFromCurrentState:YES];
+ [UIView setAnimationCurve:curve];
+ [UIView setAnimationDuration:duration];
+ [list_ setFrame:base];
+ [UIView commitAnimations];
+}
+
+- (void) resizeForKeyboardBounds:(CGRect)bounds duration:(NSTimeInterval)duration {
+ [self resizeForKeyboardBounds:bounds duration:duration curve:UIViewAnimationCurveLinear];
+}
+
+- (void) resizeForKeyboardBounds:(CGRect)bounds {
+ [self resizeForKeyboardBounds:bounds duration:0];
+}
+
+- (void) keyboardWillShow:(NSNotification *)notification {
+ CGRect bounds;
+ CGPoint center;
+ NSTimeInterval duration;
+ UIViewAnimationCurve curve;
+ [[[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] getValue:&bounds];
+ [[[notification userInfo] objectForKey:UIKeyboardCenterEndUserInfoKey] getValue:&center];
+ [[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&curve];
+ [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&duration];
+
+ CGRect kbframe = CGRectMake(round(center.x - bounds.size.width / 2.0), round(center.y - bounds.size.height / 2.0), bounds.size.width, bounds.size.height);
+ CGRect viewframe = [[[self view] window] convertRect:[self view].frame fromView:[[self view] superview]];
+ CGRect intersection = CGRectIntersection(viewframe, kbframe);
+
+ [self resizeForKeyboardBounds:intersection duration:duration curve:curve];
+}
+
+- (void) keyboardWillHide:(NSNotification *)notification {
+ NSTimeInterval duration;
+ UIViewAnimationCurve curve;
+ [[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&curve];
+ [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&duration];
+
+ [self resizeForKeyboardBounds:CGRectZero duration:duration curve:curve];
+}
+
+- (void) viewWillAppear:(BOOL)animated {
+ [super viewWillAppear:animated];
+
+ [self resizeForKeyboardBounds:CGRectZero];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
+}
+
+- (void) viewWillDisappear:(BOOL)animated {
+ [super viewWillDisappear:animated];
+
+ [self resizeForKeyboardBounds:CGRectZero];
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
+}
+
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self deselectWithAnimation:animated];