2012-06-29 102 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];