我想在用戶開始編輯UITextField並且文本字段被鍵盤隱藏時進行UIScrollView滾動。我正在使用來自以下線程的示例。編輯時無法正常工作時滾動視圖
How to make a UITextField move up when keyboard is present
我有我的四個視UITextFields。當第一次顯示鍵盤時,視圖不會自動滾動。如果我用顯示的鍵盤單擊另一個文本字段,則UIScrollView按照預期滾動。 隱藏鍵盤(通過點擊「完成」按鈕)並再次輕敲UITextField會出現同樣的問題:UIScrollView首先不滾動,但當焦點轉換到另一個文本字段時,它完全滾動。
任何人都可以幫我嗎?
在viewDidLoad
我設置的滾動視圖
keyboardIsShown = NO;
CGSize scrollContentSize = CGSizeMake(320, 350);
self.scrollView.contentSize = scrollContentSize;
我爲鍵盤通知登錄尺寸在viewWillAppear
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:self.view.window];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:self.view.window];
然後我註銷在viewWillDisappear
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
下面的兩個方法由通知調用離子。
- (void)keyboardWillShow:(NSNotification *)n {
if (keyboardIsShown) {
return;
}
NSDictionary *userInfo = [n userInfo];
NSValue *boundsValue = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyboardSize = [boundsValue CGRectValue].size;
CGRect viewFrame = self.scrollView.frame;
viewFrame.size.height -= (keyboardSize.height - 50);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[self.scrollView setFrame:viewFrame];
[UIView commitAnimations];
keyboardIsShown = YES;
}
- (void)keyboardWillHide:(NSNotification *)n {
NSDictionary *userInfo = [n userInfo];
NSValue *boundsValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGSize keyboardSize = [boundsValue CGRectValue].size;
CGRect viewFrame = self.scrollView.frame;
viewFrame.size.height += (keyboardSize.height - 50);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[self.scrollView setFrame:viewFrame];
[UIView commitAnimations];
keyboardIsShown = NO;
}
嘿,如果你想在你的「keyboardWillHide:」方法中獲得鍵盤高度,鍵盤的高度是0嗎?你是否在你的方法中設置了一個斷點,以查看程序是否進入該方法? – Lepidopteron 2011-04-01 08:53:44
「keyboardWillHide」中鍵盤的高度爲216.當鍵盤第一次出現時調用'keyboardWillShow',當鍵盤解散時正確調用'keyboardWillHide'。 – simonbs 2011-04-01 09:00:58