我有一个视图控制器(让它称之为MainViewContoller
),它存在3个不同的表(一次一个),用户可以点击一个段控件来切换这些表。
为了呈现这3个表,MainViewContoller
有3个其他视图控制器(A,B和C),每个都有一个UITableView
作为子视图并处理它自己的数据。
加载MainViewContoller
时,它会启动控制器A,B和C,并将其tableView添加到其视图中:
- (void)viewDidLoad {
[super viewDidLoad];
ViewControllerA *vcA = [ViewControllerA alloc] init];
[self.view addSubview:vcA.view];
ViewControllerB *vcB = [ViewControllerB alloc] init];
[self.view addSubview:vcB.view];
ViewControllerC *vcC = [ViewControllerC alloc] init];
[self.view addSubview:vcC.view];
}
因此,例如当用户点击分段控件并选择A时,MainViewContoller
隐藏表B和C,并取消隐藏表A.这样的事情:
if (userTapOnA) {
self.viewControllerA.tableView.hidden = NO;
self.viewControllerB.tableView.hidden = YES;
self.viewControllerC.tableView.hidden = YES;
}
问题:
当用户点击状态栏时,我希望当前可见表格滚动到顶部
这种行为非常基本,并且在使用常规视图控制器时可以免费获取,但正如您所看到的,我的视图控制器不是常规的。
我想通过使用其他控制器视图作为MainViewContoller
视图,我打破了默认行为,因此我的MainViewContoller
无法处理状态栏点击。
有人知道如何解决这个问题?
答案 0 :(得分:26)
这直接来自UIScrollView头文件:
/ *当用户点击状态栏时,滚动视图位于下方 最接近状态栏的触摸将滚动到顶部,但是 仅当其
scrollsToTop
属性为YES时,其委托才会为 从shouldScrollViewScrollToTop
返回NO,但它还没有 顶端。在iPhone上,我们只有在有手势的情况下执行此手势 带有scrollsToTop
== YES的屏幕滚动视图。如果不止一个 发现,没有人会滚动。 * /@property(nonatomic)BOOL scrollsToTop; //默认为YES。
因此,在您的情况下,将所有scrollsToTop设置为NO,除了您要在该特定时刻启用的那个。
答案 1 :(得分:2)
您应该将嵌套控制器注册为子控制器。
[self addChildViewController:vcA];
[self addChildViewController:vcB];
[self addChildViewController:vcC];
我不确定这是否有助于解决您的问题,但这是正确的方法。