首先,需要用到UITabBarController的代理
1.在WestriceMainViewController设置代理
// 设置代理
delegate = self
2.用extension分割代码,写代理方法
参数viewController就是TabBar中的控制器
/// 在选择TabBarItem的时候会调用这个方法,
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
//1.获取控制器在数组中的索引位置
let index = (childViewControllers as NSArray).index(of: viewController)
//根据selectedIndex来标注当前点击的那个item界面
print(selectedIndex)
//2.通过selectedIndex判断当前的索引是否是当前页面index,并且重复点击的索引页是selectedIndex
if selectedIndex == 0 && index == selectedIndex {
//3. 让表格滚动到顶部
//拿到导航控制器的栈底控制器也就是要滚动到顶部的控制器
let nav = childViewControllers[0] as! UINavigationController
let vc = nav.childViewControllers[0] as! WestriceHomeViewController
//通过秀才contentOffset滚动到顶部,因为是自定义所有y值要有个-64
vc.tableView?.setContentOffset(CGPoint.init(x: 0, y: -64), animated: true)
//这里需要做个延迟加载数据,因为同时滚动和加载数据会卡住
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1, execute: {
vc.loadData()
})
}
//判断目标控制器是否是UIViewController
//如果是中间的按钮就不跳转
return !viewController.isMember(of: UIViewController.self)
}