TTTableViewController scrollsToTop不工作

时间:2010-09-21 11:41:44

标签: iphone ios uitableview three20

我正在使用一个基本的Three20 TTTableViewController子类,它使用自己的数据源和模型。

问题是我似乎无法使用表的scrollsToTop属性。这是表的标准属性,继承自UIScrollView并且非常常用。

我在班上的许多不同地点/方法中尝试了以下所有内容:

self.tableView.scrollsToTop = YES;
[self.tableView setScrollsToTop:YES]


我也试过覆盖这个方法

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
    return YES; 
}

一切都没有成功。

NB。为了清楚起见,我指的是点击状态栏以将可见表格视图滚动到顶部(即第一行)的标准手势。

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

有一些混乱

根据Apple documentation of UIScrollView

  

scrollsToTop

     

一个布尔值,用于控制滚动到顶部的手势是否有效

这只是告诉scrollview,录制状态栏会使视图滚动到顶部。

您要找的是this UITableView method

  

scrollToRowAtIndexPath:atScrollPosition:动画:

     

滚动接收器,直到索引路径标识的行位于屏幕上的特定位置。

使用three20

由于您正在使用three20,因此UITableView+Additions.h>可以轻松完成您想要做的事情。 - (void)scrollToFirstRow:(BOOL)animated

[self.tableView scrollToFirstRow:YES];

没有three20

如果不使用three20,则three20的作用如下:

- (void)scrollToFirstRow:(BOOL)animated {
  if ([self numberOfSections] > 0 && [self numberOfRowsInSection:0] > 0) {
    NSIndexPath* indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop
          animated:NO];
  }
}

另一种方法

我认为这也可以(未经测试)直接使用UIScrollView(也从three20中提取):

- (void)scrollToTop:(BOOL)animated {
  [self setContentOffset:CGPointMake(0,0) animated:animated];
}

或:

[self.tableView setContentOffset:CGPointMake(0,0) animated:YES];

答案 1 :(得分:3)


感谢Vincent G指出我正确的方向。似乎问题与在类的init和viewDidLoad方法中调用的代码有关。

我发现在以下条件下,会添加两个tableview作为视图控制器视图的子视图:

  1. 在viewDidLoad方法中引用属性tableView,例如[[self tableView] setTableHeaderView:]

  2. 在init / initWithStyle方法中构建表的dataSource。

  3. 当存在两个UIScrollView时,滚动到顶部的动作无法正常工作,正如Vincent指出的那样。我会将这些调查结果作为三个人的错误提交,但是按照这些步骤,至少可以避免这样做。

    编辑:似乎这可能是由于在某些情况下在init之前调用了viewDidLoad方法。如果在viewDidLoad中引用tableview,在创建它之前,我认为该类正在创建一个。然后init将再创建一个。

答案 2 :(得分:1)

试试这个:

self.tableview.scrollingEnabled=YES;
self.tableview.scrollsToTop=YES;

同时检查您的委托在此方法中返回YES:

scrollViewWillScrollToTop:

答案 3 :(得分:0)

正如@imnk建议的那样,我的想法是一个答案,即使我没有真正的解决方案。

我正在经历的(并且经过验证确定)是,一旦我更改了tableView的frame属性,statusBar上的触摸就不再起作用了......

根据Apples documentation on UIScrollViewDelegate,每个scrollView的委托(无论其大小)都可以在- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView上返回YES。

但我查看了三个并在我的代表实施中改变了它,但没有成功。