Swift 点击TabBar滚动到顶部并且加载数据

首先,需要用到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)
    
   
}

你可能感兴趣的:(Swift 点击TabBar滚动到顶部并且加载数据)