2012-06-29 100 views
3

如果tableview包含少於10個左右的單元格,你會如何強制UITableViewCell滾動到頂部?我支持在tableview單元格內編輯託管對象上下文,而tableview處於編輯模式。不用說,如果一個單元格位於tableview的底部,當用戶去編輯事件的標題或位置時,它會被鍵盤阻塞。我嘗試了一個解決方案,如:強制UITableView滾動到頂部?

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 

    if(_selectedIndex == indexPath.row){ 
     _selectedIndex = -1; 
     [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
         withRowAnimation:UITableViewRowAnimationFade]; 
     return; 
    } 

    if(_selectedIndex >= 0){ 
     NSIndexPath *previous = [NSIndexPath indexPathForRow:_selectedIndex inSection:0]; 
     _selectedIndex = indexPath.row; 
     [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:previous] 
         withRowAnimation:UITableViewRowAnimationFade]; 
    } 

    _selectedIndex = indexPath.row; 
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
        withRowAnimation:UITableViewRowAnimationFade]; 

    [tableView setContentOffset:CGPointMake(0, [tableView rowHeight]*indexPath.row) animated:YES]; 
} 

但是,這不保留在contentOffset tableview。它會捕捉到頂部,然後回彈

回答

2

你有沒有考慮滑動整個桌面?

編輯:我沒有找到的東西,看起來像它,你在找什麼: Code here

該代碼從底部收縮表視圖的插圖,然後允許它顯示其中一個較低的單元格而不會縮回。

+0

做我剛落在源代碼tableview.h和.m文件到我現有的項目?我沒有使用UITableViewController,只有一個UITableView – HighFlyingFantasy

+0

,我沒有使用.xib或故事板......所有事情都是在一個視圖控制器(支持幻燈片左/右動畫)中使用自足的子視圖 – HighFlyingFantasy

+0

只需抓住TPKeyboardAvoidingTableView.m/.h文件並將您的UITableView實例設置爲該實例。你不需要有一個xib或一個UITableViewController。或者,你可以將你需要的代碼從你的代碼中提取出來並放到你的視圖控制器中,而不是繼承它的子類。如果由於某種原因,這不是一個合適的解決方案,我會盡力幫助你。 – Dima

3

你或許應該在UITableView的使用方法:

-(void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated 

你做的本質是什麼,當[的tableView:didSelectRowAtIndexPath方法:]你的UITableViewDelegate的方法被調用,你傳遞選擇的指數上面的方法並設置scrollposition = UITableViewScrollPositionTop。

這會將所選單元格滾動到屏幕頂部並且不在鍵盤的位置。

+0

我認爲問題在於,如果您將一個單元格滾動到頂部,否則該底部會出現在底部(如果單元格太少),那麼它會反彈回來。 – Dima

+0

我上面提到的方法將解決保持編輯的單元格可見的問題。但是,如果它是最後一個單元格,它將不能保持單元格不能跟隨鍵盤向後退,當它被解散時。除了添加虛擬或空單元格之外,您無需執行任何操作。 –

+0

我已經嘗試過,該方法什麼都不做 – HighFlyingFantasy

11

我喜歡以下解決方案,因爲它也滾動到標題視圖的頂部(如果有)。

[self.tableView setContentOffset:CGPointZero animated:YES]; 
+0

完美的解決方案! – Nianliang

3

的UITableView是的UIScrollView的子類,所以你也可以使用:

[mainTableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES]; 
0

你有沒有嘗試呢? :

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated; 

的樣品是:

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:0 animated:YES];