首先,需要用到UITabBarController的代理
1.在WestriceMainViewController設(shè)置代理
// 設(shè)置代理
delegate = self
2.用extension分割代碼,寫(xiě)代理方法
參數(shù)viewController就是TabBar中的控制器
/// 在選擇TabBarItem的時(shí)候會(huì)調(diào)用這個(gè)方法,
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
//1.獲取控制器在數(shù)組中的索引位置
let index = (childViewControllers as NSArray).index(of: viewController)
//根據(jù)selectedIndex來(lái)標(biāo)注當(dāng)前點(diǎn)擊的那個(gè)item界面
print(selectedIndex)
//2.通過(guò)selectedIndex判斷當(dāng)前的索引是否是當(dāng)前頁(yè)面index,并且重復(fù)點(diǎn)擊的索引頁(yè)是selectedIndex
if selectedIndex == 0 && index == selectedIndex {
//3. 讓表格滾動(dòng)到頂部
//拿到導(dǎo)航控制器的棧底控制器也就是要滾動(dòng)到頂部的控制器
let nav = childViewControllers[0] as! UINavigationController
let vc = nav.childViewControllers[0] as! WestriceHomeViewController
//通過(guò)秀才contentOffset滾動(dòng)到頂部,因?yàn)槭亲远x所有y值要有個(gè)-64
vc.tableView?.setContentOffset(CGPoint.init(x: 0, y: -64), animated: true)
//這里需要做個(gè)延遲加載數(shù)據(jù),因?yàn)橥瑫r(shí)滾動(dòng)和加載數(shù)據(jù)會(huì)卡住
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1, execute: {
vc.loadData()
})
}
//判斷目標(biāo)控制器是否是UIViewController
//如果是中間的按鈕就不跳轉(zhuǎn)
return !viewController.isMember(of: UIViewController.self)
}