2010-03-01 92 views
12

我将如何使用动画将UITableView滚动到特定的位置?iPhone SDK - 如何使用动画以编程方式滚动UITableView?

目前我使用这个代码跳转到一个位置:

//tableController -> viewDidLoad 
[self.tableView reloadData]; 
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0]; 
[self.tableView scrollToRowAtIndexPath:indexPath 
         atScrollPosition:UITableViewScrollPositionTop 
           animated:YES]; 

这段代码的问题是,该表跳到右侧没有任何动画正确的位置。有什么办法来启用动画或设置持续时间?

感谢您的任何帮助。

回答

0

我有两个建议你去调查:

  1. 你在模拟器或iPhone本身运行你的应用程序?我注意到模拟器中的一些动画行为有所不同。

  2. 是否有可能您正在调用scrollToRowAtIndexPath:atScrollPosition:快速连续动画两次?这可能会“混淆”动画。在处理给定事件时,您应该只调用一次该函数。

+0

感谢您的回复。我在设备上运行代码并在viewDidLoad方法中调用此代码。 – dan 2010-03-01 22:24:42

+0

这可能是,无论出于何种原因,动画不能从viewDidLoad开始,因为这是视图初始化的一部分。我并不是说我知道为什么会这样,但这听起来似乎是合理的。尝试使用NSRunLoop的performSelector调度事件,并在调用该事件时进行滚动。 – richb 2010-03-01 22:45:01

5

尝试注释掉reloadData调用。如果我正确理解你的问题,并且你在viewDidLoad,那么你不需要调用它。另外,如果你刚刚完成推视图控制器,你将不会得到一个动画滚动。您必须在viewDidLoad被调用的时间与动画开始时间之间插入延迟(我发现四分之一秒的效果很好)。

23

它正常工作对我来说:

-(void) viewDidAppear:(BOOL)animated{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:n inSection:0]; 
    [self.tableView scrollToRowAtIndexPath:indexPath 
        atScrollPosition:UITableViewScrollPositionTop 
          animated:YES]; 

} 

可以肯定,这是所谓的只有一次,你可以做这样的验证:

if(!isInitialized){ 
    isInitialized = YES; 
    .... 
} 
0

我知道这也许为时已晚,但也许这对他人有帮助, 现在你可以用[tableView scrollsToTop]来滚动表格。