自己寫的一個開源控件,高仿iOS版網(wǎng)易云音樂發(fā)現(xiàn)音樂和搜索音樂結(jié)果頁面左右滑動切換效果挥萌,如圖所示:
要使用也很簡單绰姻,只需要
LJTabPagerVC *pagerVC = [[LJTabPagerVC alloc] init];
然后給pagerVC提供一個提供視圖控制器的數(shù)據(jù)源:
pagerVC.vcsSource = _source;
這個數(shù)據(jù)源要服從LJTabPagerVCsSource
協(xié)議,這個協(xié)議有三個方法:
- (NSInteger)numberOfViewControllers; /// 要展示的視圖控制器數(shù)量
- (NSArray *)titles; /// 要展示的標題數(shù)組
- (UIViewController *)viewControllerAtIndex:(NSInteger)index; /// 在位置index的視圖控制器引瀑。
主要講一下- (UIViewController *)viewControllerAtIndex:(NSInteger)index;
這個代理方法狂芋,當滑動到某個位置,該位置的視圖控制器不存在時憨栽,會向數(shù)據(jù)源請求獲取這個控制器帜矾。這樣做主要是為了實現(xiàn)懶加載翼虫。比如網(wǎng)易新聞有十幾個標題,不可能一開始就去創(chuàng)建對應的十幾個控制器屡萤,只有用戶滑到對應的位置才去創(chuàng)建對應的視圖控制器珍剑,以節(jié)省內(nèi)存。另外死陆,當用戶瀏覽了這十幾個控制器招拙,這十幾個控制器都在內(nèi)存中,會占用比較多的內(nèi)存措译,這時可以調(diào)用LJTabPager的- (void)reloadVCsExceptSelected:(BOOL)exceptSelected
方法别凤,傳入YES參數(shù),把除當前展示的控制器以外的控制器移除领虹,以降低內(nèi)存占用规哪。當用戶再左右滑動時,由于對應的控制器不存在了塌衰,所以又去重新向vcsSource數(shù)據(jù)源獲取對應的控制器由缆。
例如:
- (NSInteger)numberOfViewControllers {
return 8;
}
- (NSArray *)titles {
NSArray *array = @[@"個性推薦", @"歌單", @"主播電臺", @"排行榜", @"用戶", @"歌手", @"專輯", @"單曲"];
return array;
}
- (UIViewController *)viewControllerAtIndex:(NSInteger)index {
TableViewController *controller = [[TableViewController alloc] init];
switch (index) {
case 0:
controller.title = @"個性推薦";
break;
case 1:
controller.title = @"歌單";
break;
case 2:
controller.title = @"主播電臺";
break;
case 3:
controller.title = @"排行榜";
break;
case 4:
controller.title = @"用戶";
break;
case 5:
controller.title = @"歌手";
break;
case 6:
controller.title = @"專輯";
break;
case 7:
controller.title = @"單曲";
break;
default:
break;
}
return controller;
}
若想使某個viewController在被選中或滑到了它時收到通知,只需讓它服從LJTabPagerVCDelegate
協(xié)議猾蒂,然后實現(xiàn)- (void)hasBeenSelectedAndShown
方法。
默認pagerTabBar的背景色是半透明的是晨,你也可以通過LJTabPagerVC
的 tabBarBKColor
屬性自定義它的背景色肚菠。
可以通過LJTabPagerVC
的selectedLineColor
屬性自定義滾動條的顏色。
可以通過LJTabPagerVC
的selectedTabItemColor
屬性自定義選中按鈕的顏色罩缴。