使用SDK 6.1,Xcode 4.6.1,我制作了一个新项目Master-Detail iOS App,ARC,没有故事板。
然后在DetailViewController
, 在里面viewDidLoad
我添加两个UITableView
包含在UIViewController
s 并确保第二个像这样隐藏:
- (void)viewDidLoad
{
[super viewDidLoad];
UIViewController *lViewController1 = [[UIViewController alloc] init];
UITableView *lTableView1 = [[UITableView alloc] initWithFrame: self.view.frame];
lTableView1.scrollsToTop = YES;
[lViewController1.view addSubview: lTableView1];
lTableView1.dataSource = self;
[self.view addSubview: lViewController1.view];
[self addChildViewController: lViewController1];
UIViewController *lViewController2 = [[UIViewController alloc] init];
UITableView *lTableView2 = [[UITableView alloc] initWithFrame: self.view.frame];
lTableView2.scrollsToTop = YES;
[lViewController2.view addSubview: lTableView2];
lTableView2.dataSource = self;
[self.view addSubview: lViewController2.view];
[self addChildViewController: lViewController2];
// now hide the view in view controller 2
lViewController2.view.hidden = YES;
}
(我确保DetailViewController
是一个返回 100 行的数据源UITableViewCell
与textLabel.text
set to @"hello"
)
第二个视图控制器的存在使得scrollsToTop
(点击状态栏)不再起作用。如果我不使用UIViewController
遏制并只需添加两个UITableView
s 并将第二个设置为隐藏,scrollsToTop
确实有效。
我究竟做错了什么?
scrollsToTop
仅适用于单个可见视图。来自文档 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html:
此手势适用于单个可见滚动视图;如果有多个滚动视图(例如,日期选择器)设置了此属性,或者委托返回NO
in scrollViewShouldScrollToTop:
, UIScrollView
忽略该请求。滚动视图滚动到内容视图的顶部后,它向委托发送一个scrollViewDidScrollToTop:
信息。
你可以尝试打电话[tableView setContentOffset:CGPointZero animated:YES]
而是手动在每个表格(或滚动)视图上进行操作。为此,请实施scrollViewShouldScrollToTop:
方法中的UIScrollViewDelegate
协议:
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
[lTableView1 setContentOffset:CGPointZero animated:YES];
[lTableView2 setContentOffset:CGPointZero animated:YES];
return NO;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)