2011-03-09 52 views
1

我想在顯示鍵盤時在UITableView中滾動。我調整了TableView的大小,以便它不被鍵盤覆蓋。我重寫了textFieldShouldReturn函數以跳到我的UITableView中的下一個UITextField,並滾動到下一個字段。下面是我使用的代碼:UITableView不能正確滾動(或根本沒有)

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    UITableViewCell *cell = (UITableViewCell *)[textField superview]; 
    NSIndexPath *indexPath = [self.prefTableView indexPathForCell:cell]; 
    NSString *nextRowKey = [preferences nextRowKeyAtIndexPath:indexPath]; 
    [textField resignFirstResponder]; 
    if (nextRowKey != nil) { 
     tagBeingEdited = textField.tag + 1; 
     NSIndexPath *nextIndexPath = [NSIndexPath indexPathForRow:indexPath.row+1 
                inSection:indexPath.section]; 

     [self.prefTableView scrollToRowAtIndexPath:nextIndexPath 
            atScrollPosition:UITableViewScrollPositionTop 
              animated:YES]; 
     //[self.prefTableView selectRowAtIndexPath:nextIndexPath 
     //        animated:YES 
     //       scrollPosition:UITableViewScrollPositionMiddle]; 
     if ([[self.prefTableView indexPathsForVisibleRows] containsObject:indexPath] == YES) { 
      [[self.prefTableView viewWithTag:tagBeingEdited] becomeFirstResponder]; 
     } 
    } else { 
     isEditing = NO; 
    } 
    return NO; 
} 

然而,我的觀點從未滾動。或者,如果我手動滾動視圖,它會回到頂部。爲什麼?

注意:我只使用scrollToRowAtIndexPath和selectRowAtIndexPath之一。我只是把他們倆都放在那裏,因爲我先嚐試了一個,然後嘗試了另一個。

+0

是您的視圖控制器的UIViewController的一個子類?如果您改爲使用UITableViewController的子類,則可以更好地支持鍵盤+表格。例如,它將爲您處理UITableView的大小調整。 – occulus 2011-03-09 11:29:48

+0

它是UITableViewController的子類。儘管如此,bahaviour和現在一樣。我在一些其他提示後將其更改爲UIViewController。這是我的視圖控制器聲明: @interface PreferencesController:UIViewController中 Arne 2011-03-09 13:26:48

+0

我想多一點,增加了更多行,並啓用了細胞展示自己的選擇。選擇正確進行,但視圖幾乎任意滾動。 – Arne 2011-03-09 14:05:08

回答

0

@occulus是正確的,UITableViewController會在鍵盤出現時自動處理大小調整。如果你想要UIViewController的子類的行爲,你需要額外的工作。

從可可與愛的以下鏈接有一個這樣做的例子。

http://cocoawithlove.com/2010/12/uitableview-construction-drawing-and.html

+0

謝謝。會看看! – Arne 2011-03-09 16:25:36

+0

好的,我孤立了這個問題。我的UITableView和UITableViewController對是另一個UIViewController派生對象的子視圖。我手動加載我自己的類,並使用addSubView將其添加到主UIView。如果我忽略這個中級課程,滾動和調整大小會自動生效。不過,我想擁有這個中級課程,因爲我添加了一個標題和一個按鈕來排除視圖...讓我們看看我能否讓它們一起工作。 :) – Arne 2011-03-09 16:39:57