我試圖調整滾動視圖,當用戶點擊鍵盤的「下一步」按鈕。棘手的部分是我以編程方式生成自定義表格單元格。每個單元格都有一個文本字段。它看起來是這樣的:ScrollViews,鍵盤,隱藏文本字段和編程式繪製自定義表單元格
我試過內容從鍵盤背後的動人以下Apple's instructions,但我發現它並不完全工作這種情況下,主要是因爲UIKeyboardDidShowNotification只調用一次,而不是每次點擊「下一步」按鈕。
我的解決方案是重新連接蘋果的例子,使用UIKeyboardDidShowNotification存儲鍵盤高度和textFieldDidBeginEditing來處理滾動視圖調整。
下面是我(嘗試)來調整滾動視圖:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbHeight, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
CGRect aRect = self.view.frame;
aRect.size.height -= kbHeight;
if (!CGRectContainsPoint(aRect, activeField.frame.origin)) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbHeight);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
在此功能中,如果塊永遠不會觸發。我使用了兩個NSLog語句來查找每個activeField實例報告相同的原點(儘管在應用程序運行時不共享可見的原點)。
我知道activeField變量是正確更新的,因爲我將它轉儲到日誌中,並且每次調用此函數時字段的標記都不相同。
所以,我的問題 - 我認爲 - 是:我如何獲得以編程方式生成的自定義表格單元格包含文本字段以具有正確的來源?
tableView是一個scrollview,我認爲你不應該通過在scrollView中包裝tableView來引入一個新的複雜程度。要讓TableView滾動到一個certein單元格,你可以使用:'scrollToRowAtIndexPath:atScrollPosition:animated:'。如果鍵盤隱藏了需要滾動到底的行,只需減小tableView的高度即可。您可以在委託調用和通知傳遞的userInfo字典中獲取鍵盤的框架。 – 2011-05-20 06:31:36
明白了!你應該重新發布這個答案,以便我可以給予適當的獎勵。謝謝您的幫助! – jeffmueller 2011-05-20 18:42:37
非常好,在這裏你與一個單獨的答案:) – 2011-05-20 19:31:01