点击状态栏时滚动到顶部

时间:2013-03-23 16:41:53

标签: iphone ios objective-c uitableview uiviewcontroller

我有一个视图控制器(让它称之为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无法处理状态栏点击。

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

2 个答案:

答案 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];

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