2012-11-29 77 views
-2

我已經創建了一個視圖控制器。 安裝一個包含文本標籤的一堆自定義單元格的tableview。當鍵盤出現時,tableview的框架不會自動調整大小。在界面生成器中是否有複選框,我錯過了什麼?uitableview不用鍵盤調整大小

我應該檢查什麼設置?您的視圖控制器上

+0

它是UIViewController還是UITableViewController?正如你所知的UITableViewController的tableView不會調整大小 – Atif

+0

即使你使用的是UIViewController,你也必須在出現鍵盤時寫入調整大小的代碼。 – Atif

+0

如果是這樣,我會很快看到會發生什麼。你是對的。我正在使用UIViewController。 – Hackmodford

回答

2

如果您正在使用UIViewController,您必須在出現鍵盤時編寫調整大小的代碼。您可以處理UIKeyboardWillShowNotification, UIKeyboardDidShowNotification, UIKeyboardWillHideNotification, UIKeyboardDidHideNotification以適當調整tableview的大小。

+0

我用了一個UITableViewController,它現在工作正常... – Hackmodford

11

添加下面的鍵盤通知事件:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; 

和調整您的tableView的幀按鍵盤通知:

- (void)keyboardDidShow:(NSNotification *)notification 
{ 
    NSDictionary *userInfo = [notification userInfo]; 
    CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 
    CGRect frame = CGRectMake(self.tableView.frame.origin.x, 
           self.tableView.frame.origin.y, 
           self.tableView.frame.size.width, 
           self.tableView.frame.size.height - size.height); 
    self.tableView.frame = frame; 
} 

- (void)keyboardWillHide:(NSNotification *)notification 
{ 
    NSDictionary *userInfo = [notification userInfo]; 
    CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 
    self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, 
             self.tableView.frame.origin.y, 
             self.tableView.frame.size.width, 
             self.tableView.frame.size.height + size.height); 
} 

如果要向上滾動TAPP單元格,執行在textFieldDidBeginEditing:方法如下更改:

- (void) textFieldDidBeginEditing:(UITextField *)textField { 
    UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview]; 
    [self.tableView scrollToRowAtIndexPath:[tView indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
} 
+1

@ matt的答案是正確的。出現鍵盤時,不應該更改tableView的框架。 –

+0

這段代碼對我來說不太合適。首先,「keyboardWillHide」功能仍將我的屏幕鍵盤視爲352像素高,而不是0.其次,在Landscape iPad應用程序中,鍵盤的「高度」實際上存儲在「size.width」中,而不是「size.height」的價值。 –

+1

通知方法應該是:[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide :) name:UIKeyboardWillHideNotification object:nil]; –