【问题标题】:Scroll to top when tapping the status bar点击状态栏时滚动到顶部
【发布时间】:2013-03-13 10:16:37
【问题描述】:

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

为了呈现这 3 个表,MainViewContoller 有 3 个其他视图控制器(A、B 和 C),每个都有一个 UITableView 作为子视图并处理它自己的数据。
MainViewContoller 被加载时,它会启动控制器 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 不处理状态栏点击。

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

【问题讨论】:

    标签: iphone ios objective-c uitableview uiviewcontroller


    【解决方案1】:

    这是直接来自UIScrollView的头文件:

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

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

    所以在你的情况下,将所有 scrollsToTop 设置为 NO,除了你想在那个特定时刻启用的那个。

    【讨论】:

    • 10x,非常有帮助:)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-15
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2013-01-29
      相关资源
      最近更新 更多