iOS: UITableView弹出后滚动回顶部ViewController
iOS: Scroll UITableView back to the top after popping ViewController
在某些情况下,我的 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
,但它并不总是有效。
可以为动画添加完成块。删除你的计时器并尝试这样的事情:
- (void)popToViewController {
[CATransaction begin];
[CATransaction setCompletionBlock:^{
[self.viewController method];
}];
[self.navigationController popViewControllerAnimated:YES];
[CATransaction commit];
}
在某些情况下,我的 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
,但它并不总是有效。
可以为动画添加完成块。删除你的计时器并尝试这样的事情:
- (void)popToViewController {
[CATransaction begin];
[CATransaction setCompletionBlock:^{
[self.viewController method];
}];
[self.navigationController popViewControllerAnimated:YES];
[CATransaction commit];
}