在我們實際開發的過程中,類似于網易新聞今日頭條的頂部分段選擇是很常見的一種需求。因為自己在工作中經常用到,所以在封裝的同時我還在考慮如何讓這個框架更加便捷更加易用并且跟相關控制器或者視圖減小耦合性,所以此框架是我認為比較低耦合且容易使用的一種分段控制方案,不需要包上您所需要的控制器的.h文件,只需要它們的名稱即可實現!先放上我的框架地址:
NinaPagerView-Github
特點
- 您只需創建自己的ViewController即可,后續的操作都在自己的ViewController中。
- 可分步加載您所添加的ViewController,實現類似網易新聞,虎撲看球的效果。
- 只需一行代碼創建即可實現所有功能。
- 菜單欄中選中未選中的顏色可自己定制。
- 不僅僅是UIViewController,您可以根據您的需求創建UIView添加到NinaPagerView中。
- 可根據您的需求對上方的滑塊進行選擇,無論是背景顏色還是文字顏色
效果預覽
NinaPagerView為您提供了三種滑動樣式,先后順序分別為NinaPagerStyleBottomLine、NinaPagerStyleSlideBlock和NinaPagerStyleStateNormal:
如何使用
NinaPagerView使用起來很方便,只需要:
NinaPagerView *ninaPagerView = [[NinaPagerView alloc] initWithNinaPagerStyle:NinaPagerStyleSlideBlock WithTitles:titleArray WithVCs:vcsArray WithColorArrays:colorArray];
[self.view addSubview:ninaPagerView];
即可!(具體的使用細節方面可以去NinaPagerView中查看)
原理講解
其實在眾多的分段控制框架中,在滑動監聽讓標題移動這些方面都大同小異,所以這方面的講解我就不多贅述了,我著重寫一下我是如何實現只傳入控制器或者視圖的名稱就可以對其進行創建的。
實現代碼
當您想按照上述形式創建控制器數組時,假設您在項目中創建了FirstViewController到NinthViewController九個控制器,在NinaPagerView中您可以這樣傳入控制器數組(其實是文本數組):
NSArray *vcsArray = @[
@"FirstViewController",
@"SecondViewController",
@"ThirdViewController",
@"ForthViewController",
@"FifthViewController",
@"SixthViewController",
@"SeventhViewController",
@"EighthViewController",
@"NinthViewController",
];
不需要import它們的頭文件,只需要把它們的名稱傳入即可!
框架實現代碼講解
在NinaPagerView中,對于傳入進來的數組,雖然我們稱它為控制器數組,但是實際上傳進來的是數組成員是NSString類型,我們只需要知道它的名稱即可找到相應的控制器或者視圖。具體識別代碼如下:
NSString *className = classArray[i];
Class class = NSClassFromString(className);
if ([class isSubclassOfClass:[UIViewController class]] {
ctrl = class.new;
}else if ([class isSubclassOfClass:[UIView class]]) {
UIView *singleView =class.new;
}
通過Class類對傳入的數據進行類型的判別,判斷它的父類是UIViewController還是UIView,這樣判別出結果后再對其進行創建,以此來來實現對傳入文本的解析和變量的創建。
最后
- NinaPagerView框架支持Cocoapods和Carthage的使用,您如果覺得還不錯,麻煩給個star支持一下~
- 如果您在使用的過程中出現了問題,請在框架中issue我,非常感謝!