2012-07-03 39 views
9

我有一個UITableViewController與分組靜態UITableView。我正在爲故事板上的靜態表格視圖定義單元格。其中一個單元格中有一個文本框。當這個文本字段被調用時,鍵盤彈出,但是,tableview並不像它通常在桌面視圖控制器上那樣自動調整大小。所以現在鍵盤部分覆蓋了文本框,我無法向上滾動。UITableViewController和UITextField鍵盤

我的理解是,當您使用UITableViewController和tableview時,可視區域應該在調用鍵盤時自動縮小。它在我的應用程序的其他部分按照預期工作,而不是使用此靜態表視圖。它不適用於靜態表嗎?還有什麼我失蹤?有沒有簡單的方法來解決這個問題?

由於

+0

您可以移動視圖向上或手動調整其大小。 – Dustin

+1

問題是爲什麼它通常不會自動執行它? – Keith

+0

可能因爲您正在使用靜態表格視圖(就像您猜到的一樣)。靜態表格視圖是專門設計的,不會改變 - 這就是爲什麼他們被稱爲「靜態」的原因 – Dustin

回答

48

回答

它無關,與靜態細胞。他們應該工作。

如果您的控制器已經是UITableViewController,請檢查您是否使用了方法viewWillAppear。如果你這樣做,你必須致電[super viewWillAppear:YES]以獲得「自動行爲」。

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:YES]; // This line is needed for the 'auto slide up' 
    // Do other stuff 
} 

這個問題變成了很容易,因爲控制器的樣板代碼不來與viewWillAppear方法調用,如果你在你的控制器定義它,你覆蓋它。

額外信息

看看這個鏈接。

Apple Table View Programming Guide

注:在的UITableViewController的iOS 3.0具有新的功能。 A 表視圖控制器支持對錶視圖行進行內聯編輯;如果, 例如,行已在編輯模式嵌入的文本字段,它 滾動行被被 顯示的虛擬鍵盤.... ....嗒嗒

的重要位以上編輯

的的UITableViewController類實現通過重寫 的loadView,viewWillAppear中:和其他的方法的上述行爲從 UIViewController中繼承的。在你的UITableViewController的子類中,你可能會重寫這些方法來獲取專門的行爲。如果你做 重寫這些方法,一定要調用超類 執行該方法,通常作爲第一個方法調用,得到 的默認行爲。

+0

我在這裏發佈這篇文章後不久發現它與靜態表無關。我創建了一個測試靜態表,它工作正常,所以我知道這是我的代碼。你100%正確。這是[super viewWillAppear:YES] ;.只要我添加到我的viewWillAppear它的工作。我猜想它是如何被刪除的。本週我很擔心這個問題,結果很簡單。謝謝 – Keith

+1

乾杯的人。你的問題指向我的文檔,我學到了另一個陷阱=) –

+1

偉大的答案,可恥的你沒有更多的票。無論如何,這是一個。 –

0

推動視圖向上如果被選擇用於編輯的表形式之一(需要鍵盤通知實現)

- (void) keyboardDidShow:(NSNotification *)aNotification 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.25]; 
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y-moveAmount); 
    [UIView commitAnimations]; 
    isRaised = [NSNumber numberWithBool:YES]; 
} 

調整大小的表(除以2高度)。將其交換到鍵盤確實顯示方法。此外,您可以使用鍵盤確實隱藏方法來撤銷這些東西。

CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, mineTable.frame.size.height/2); 
mineTable.frame = temp; 
+1

這是完整的答案嗎?似乎有些事情不見了。 – Keith

+0

嗯,我不想讓你看到一堆你已經知道如何編碼的東西。我確實告訴你該怎麼做(實現鍵盤通知)。這只是一些示例代碼,可以讓您指出正確的方向。 – Dustin

1

對於斯威夫特

override func viewWillAppear(animated: Bool) { 

    super.viewWillAppear(animated) 

}