5

我有一个视图控制器(让我们称之为MainViewContoller),它存在 3 个不同的表(一次一个),用户可以点击一个段控件在这些表之间切换。

为了呈现这 3 个表,MainViewContoller有 3 个其他视图控制器(A、B 和 C),每个都有一个UITableView作为子视图并处理它自己的数据。
当 aMainViewContoller被加载时,它会启动控制器 A、B 和 C,并将它们的 tableViews 添加到它的视图中:

- (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不处理状态栏点击。

有人知道如何解决这个问题吗?

4

2 回答 2

26

这直接来自 UIScrollView 头文件:

/* 当用户点击状态栏时,最靠近状态栏的触摸下方的滚动视图将滚动到顶部,但只有当它的scrollsToTop属性为YES时,它的delegate才不会从返回NO shouldScrollViewScrollToTop,并且它还没有在顶部。在 iPhone 上,只有当屏幕上有一个带有scrollsToTop== YES 的滚动视图时,我们才会执行此手势。如果找到多个,则不会滚动任何一个。*/

@property(nonatomic) BOOL scrollsToTop; //默认是YES。

因此,在您的情况下,将所有 scrollsToTop 设置为 NO,除了您要在该特定时刻启用的那个。

于 2013-03-23T16:51:12.517 回答
2

您应该将嵌套控制器注册为子控制器。

[self addChildViewController:vcA];
[self addChildViewController:vcB];
[self addChildViewController:vcC];

我不确定这是否有助于解决您的问题,但这是正确的方法。

于 2013-03-23T16:45:55.923 回答