登录后如何实现滚动至顶部?附TabBarController跳转代码求助
实现登录后返回首页并滚动至顶部的方案
很容易解决这个问题,你只需要在现有代码的基础上,获取到首页根控制器中的滚动视图(比如UITableView/UIScrollView),然后调用setContentOffset:方法将其滚动到顶部即可。下面根据不同的首页控制器结构给你具体的实现代码:
情况1:首页是UINavigationController嵌套UITableViewController
如果你的首页(tabBar索引0的控制器)是一个导航控制器,且其根控制器是UITableViewController,可以直接通过控制器的tableView属性操作:
-(void) clickLogin:(UIButton*)sender { // 返回首页tab NSInteger index = 0; self.tabBarController.selectedIndex = index; // 获取首页的导航控制器 UINavigationController *homeNav = (UINavigationController *)self.tabBarController.viewControllers[index]; // 回到导航控制器的根页面 [homeNav popToRootViewControllerAnimated:NO]; // 获取根页面的UITableViewController UITableViewController *homeTableVC = (UITableViewController *)homeNav.topViewController; // 滚动至顶部,animated设为YES会有平滑动画,NO则瞬间到位 [homeTableVC.tableView setContentOffset:CGPointZero animated:YES]; }
情况2:首页是自定义UIViewController,内部包含滚动视图
如果你的首页是自定义的UIViewController,里面有UITableView或UIScrollView,可以通过两种方式获取滚动视图:
方式A:给滚动视图设置tag
在首页控制器的视图加载代码中,给滚动视图设置tag(比如tag = 100):
// 首页控制器的viewDidLoad中 self.mainScrollView.tag = 100;
然后在登录按钮的点击方法中:
-(void) clickLogin:(UIButton*)sender { // 返回首页tab NSInteger index = 0; self.tabBarController.selectedIndex = index; UINavigationController *homeNav = (UINavigationController *)self.tabBarController.viewControllers[index]; [homeNav popToRootViewControllerAnimated:NO]; // 获取自定义首页控制器 UIViewController *homeVC = homeNav.topViewController; // 通过tag获取滚动视图 UIScrollView *targetScrollView = (UIScrollView *)[homeVC.view viewWithTag:100]; if (targetScrollView) { [targetScrollView setContentOffset:CGPointZero animated:YES]; } }
方式B:给自定义控制器添加滚动视图属性
在自定义首页控制器的头文件中暴露滚动视图的属性:
@interface CustomHomeVC : UIViewController @property (nonatomic, strong) UITableView *mainTableView; // 或者UIScrollView @end
然后在登录点击方法中直接访问:
-(void) clickLogin:(UIButton*)sender { // 返回首页tab NSInteger index = 0; self.tabBarController.selectedIndex = index; UINavigationController *homeNav = (UINavigationController *)self.tabBarController.viewControllers[index]; [homeNav popToRootViewControllerAnimated:NO]; // 强转成自定义首页控制器 CustomHomeVC *homeVC = (CustomHomeVC *)homeNav.topViewController; // 滚动至顶部 [homeVC.mainTableView setContentOffset:CGPointZero animated:YES]; }
注意事项
- 确保在调用
setContentOffset:时,滚动视图已经被加载(也就是首页控制器的viewDidLoad已经执行),tabBar切换到首页后通常视图已经加载完成,所以不用担心这个问题。 - 如果想要更顺滑的体验,可以把
animated参数设为YES;如果需要瞬间到位,设为NO即可。
内容的提问来源于stack exchange,提问作者Test 87
相关产品推荐
相关产品推荐

