【问题标题】:iOS: Scroll UITableView back to the top after popping ViewControlleriOS:弹出 ViewController 后将 UITableView 滚动回顶部
【发布时间】:2018-11-15 09:07:27
【问题描述】:

在某些情况下,我的UITableView 需要在弹回ViewController 后一直滚动到顶部。

下面的代码运行良好(为简单起见,我对其进行了编辑),但我希望找到一种更好的方法,而不使用延迟计时器。如果我不使用计时器,UITableView 不会一直滚动到顶部,因为 ViewController 尚未加载(我认为)。

DetailController.m

- (void)popToViewController {
    // pop back to ViewController.
    [self.navigationController popViewControllerAnimated:YES];

    // Calls ViewController method
    [self.viewController method];
}

ViewController.m

- (void)method {
   dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
            [self.tableView setContentOffset:CGPointZero animated:NO];
        });
}

我尝试在ViewController 中使用ViewDidAppear 并且它可以工作,但是如果我弹出 ViewController,它会一直被调用。我只需要在某些情况下一直向上滚动UITableView

编辑:我也试过dispatch_async,但它并不总是有效。

【问题讨论】:

  • 使用从detailVC返回到masterVC的委托方法。在那里你可以传递一个带有条件的参数,然后在 masterVC 中你可以决定是否滚动。

标签: ios objective-c tableview popviewcontroller


【解决方案1】:

可以为动画添加完成块。删除您的计时器并尝试以下操作:

- (void)popToViewController {
    [CATransaction begin];

    [CATransaction setCompletionBlock:^{
        [self.viewController method];
    }];

    [self.navigationController popViewControllerAnimated:YES];

    [CATransaction commit];
}

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2021-08-20
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    相关资源
    最近更新 更多