需求說(shuō)明
1、啟動(dòng)APP時(shí),首頁(yè)默認(rèn)為熱門;
2、用戶可以左右滑動(dòng)選擇頻道
3、點(diǎn)擊啦字可以快速定位到熱門最頂部并刷新;
4、支持下拉刷新
5、單標(biāo)簽不顯示數(shù)字,多標(biāo)簽時(shí)顯示數(shù)字;
工具箱
1、工具箱跟隨底部欄收起和顯示;
2、初始默認(rèn)顯示出來(lái)
需求地址
http://192.168.1.75/114la/220/114la_220/#g=1&p=2_0_%E9%A6%96%E9%A1%B5_%E7%83%AD%E9%97%A8
層次結(jié)構(gòu)
首頁(yè)由NewHomePageViewController管理,熱門、經(jīng)驗(yàn)、說(shuō)明書、我的等需要顯示的則加到其子控制器中,并把view加入其子view。
var encyclopediaVc: LifeEncyclopediaViewController! //熱門
var experienceVc: ExperienceViewController! //經(jīng)驗(yàn)
var instructionsVc: InstructionsViewController! //說(shuō)明書
var meVc: MeViewController! //我的
//各自界面的邏輯由各自界面的字控制器實(shí)現(xiàn)及控制。
新需求中加入了“城市黃頁(yè)”,該模塊需要由服務(wù)端接口控制是否顯示。
核心代碼
viewdidload時(shí)將服務(wù)端獲取的是否顯示取出,確保不會(huì)被中途修改該字段。然后使用shouldShowCity屬性作為判斷是否顯示城市黃頁(yè)。
shouldShowCity = shouldShowCityPage
將需要顯示的控制器加入首頁(yè)的子控制器中,并設(shè)置布局。
func setupSubController() {
encyclopediaVc = LifeEncyclopediaViewController()
addChildViewController(encyclopediaVc)
encyclopediaVc.didMove(toParentViewController: self)
experienceVc = ExperienceViewController()
addChildViewController(experienceVc)
experienceVc.didMove(toParentViewController: self)
if shouldShowCity {
instructionsVc = InstructionsViewController()
addChildViewController(instructionsVc)
instructionsVc.didMove(toParentViewController: self)
}
meVc = MeViewController()
meVc.shouldHiddenNavBar = true
addChildViewController(meVc)
meVc.didMove(toParentViewController: self)
}
切換到指定的某個(gè)界面,添加子控制器的順序與添加子view的順序一致,偏移量根據(jù)index計(jì)算。
showVc:指定控制器。
func showTargetView(showVc: UIViewController, animated: Bool) {
contentCurrentPage = indexForVc(Vc: showVc)
contentScrollView.setContentOffset(CGPoint(x: contentCurrentPage * contentScrollView.frame.width, y: 0), animated: animated)
}
func indexForVc(Vc: UIViewController) -> CGFloat {
return CGFloat(self.childViewControllers.index(of: Vc) ?? 0)
}
func resetHomePage() {
encyclopediaNavBar.hotBtnClicked(encyclopediaNavBar.hotBtn)
encyclopediaVc.scrollToTopAndRefresh()
}
該方法是切換到熱門列表,然后再刷新數(shù)據(jù)。