我正在使用一个基本的Three20 TTTableViewController
子类,它使用自己的数据源和模型。
问题是我似乎无法使用表的scrollsToTop属性。这是表的标准属性,继承自UIScrollView并且非常常用。
我在班上的许多不同地点/方法中尝试了以下所有内容:
self.tableView.scrollsToTop = YES;
[self.tableView setScrollsToTop:YES]
我也试过覆盖这个方法
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
return YES;
}
一切都没有成功。
NB。为了清楚起见,我指的是点击状态栏以将可见表格视图滚动到顶部(即第一行)的标准手势。
非常感谢任何帮助!
答案 0 :(得分:3)
根据Apple documentation of UIScrollView:
scrollsToTop
一个布尔值,用于控制滚动到顶部的手势是否有效
这只是告诉scrollview,录制状态栏会使视图滚动到顶部。
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作为视图控制器视图的子视图:
在viewDidLoad方法中引用属性tableView,例如[[self tableView] setTableHeaderView:]
在init / initWithStyle方法中构建表的dataSource。
当存在两个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。
但我查看了三个并在我的代表实施中改变了它,但没有成功。