XDPagesView(可添加Header的多控制器列表)

傳送門:喜歡的記得點贊哦
GitHub:https://github.com/Xiexingda/XDPagesView.git

功能簡介:

  • XDPagesView是一個多控制器視圖粟誓,代碼結(jié)構(gòu)簡單陨舱,擁有極多的自定義配置項,使用起來非常簡介靈活(該控件不采用分類步绸,也不需要繼承,對源代碼沒有任何代碼污染)
  1. 支持橫豎屏
  2. 支持刷新列表
  3. 支持暗夜模式
  4. 支持header視圖
  5. 還有很多经瓷,就不一一列舉了筐乳,自己看吧...

基本用法:

#import "XDPagesView.h"
    
    
@interface Demo ()<XDPagesViewDelegate>
...
@end

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //配置項隘马,可以做一些自定義配置
    XDPagesConfig *config = [XDPagesConfig config];
    
    // 頂部下拉 XDPagesPullOnTop
    XDPagesView *pagesView = [[XDPagesView alloc]initWithFrame:self.view.bounds config:config style:XDPagesPullOnTop];
    
    //遵循代理
    pagesView.delegate = self;
    
    //設(shè)置header視圖
    pagesView.pagesHeader = self.header;
    
    [self.view addSubview:pagesView];
 }
    
    
 #pragma mark -- XDPagesViewDelegate 必須實現(xiàn)以下兩個代理   
    
/*
    返回一個標(biāo)題組
    標(biāo)題作為每個頁面的唯一,不能重復(fù)
*/
- (NSArray<NSString *> *)xd_pagesViewPageTitles {
    return @[@"標(biāo)題一", @"標(biāo)題二", @"標(biāo)題三"];
}
    
- (UIViewController *)xd_pagesView:(XDPagesView *)pagesView controllerForIndex:(NSInteger)index title:(NSString *)title {
    
    // 緩存復(fù)用控制器
    UIViewController *vc = [pagesView dequeueReusablePageForIndex:index];
    
    if (!vc) {
        if (index == 0) {
            // 傳值方式扫步,可以通過重寫init來實現(xiàn)傳值
            Page_0 *page = [[Page_0 alloc]init];
            vc = page; 
        } 
        else if (index == 1) {
            Page_1 *page = [[Page_1 alloc]init];
            vc = page;
        } 
        else if(index == 2) {
            Page_2 *page = [[Page_2 alloc]init];
            vc = page;  
        } 
    }
    
    return vc;
}
    

基礎(chǔ)功能

1. 跳轉(zhuǎn)到某一頁

應(yīng)用場景:
想要切換到某個頁面魔策,可以使用下面兩個方法

功能方法:
- (void)jumpToPage:(NSInteger)page;
- (void)jumpToPage:(NSInteger)page animate:(BOOL)animate;

使用示例:
[pagesView jumpToPage:1];

2. 刷新列表

應(yīng)用場景:
當(dāng)控制器列表有變動時,可以刷新列表河胎,
比如開始只有控制@[@"標(biāo)題一", @"標(biāo)題二", @"標(biāo)題三"]闯袒,后來又添加了一個變成了@[@"標(biāo)題一", @"標(biāo)題二", @"標(biāo)題三", @"標(biāo)題四"]

功能方法:刷新列表后定位到哪一頁
- (void)reloadataToPage:(NSInteger)page;

使用示例:
[pagesView reloadataToPage:1];

3. 刷新配置

應(yīng)用場景:
當(dāng)要對某些配置進行更改時,可以通過刷新配置來實現(xiàn)游岳,比如暗黑模式的處理(注意* 有些屬性是不能被刷新的政敢,具體可參考代碼里注釋)

功能方法:
- (void)reloadConfigs;

使用示例:

//初始化時,我們把標(biāo)題欄配置成綠色
XDPagesConfig *config = [XDPagesConfig config];
config.titleBarBackColor = [UIColor greenColor];
XDPagesView *pagesView = [[XDPagesView alloc]initWithFrame:self.view.bounds config:config style:XDPagesPullOnTop];
pagesView.delegate = self;
pagesView.pagesHeader = self.header;
[self.view addSubview:pagesView];


//暗夜模式時我們需要把導(dǎo)航欄變成黃色
config.titleBarBackColor = [UIColor yellowColor];
//配置更改后胚迫,調(diào)用刷新會立即生效
[pagesView reloadConfigs];

4. 滾動到吸頂位置

應(yīng)用場景:
在某些情況下喷户,為了讓列表展示的內(nèi)容更多,可能需要把列表滾動到吸頂位置

功能方法:
- (void)scrollToCeiling:(BOOL)animate;

使用示例:
[pagesView scrollToCeiling:YES];

5. 添加標(biāo)題欄未讀標(biāo)記

應(yīng)用場景:
通知访锻,未讀消息

功能方法:
/**
 展示標(biāo)題欄某個頁面的未讀消息
 @param number 未讀數(shù)褪尝,當(dāng)為0時隱藏
 @param idx 對應(yīng)索引
 @param color badge顏色
 @param isNumber 是否顯示數(shù)字
 */
- (void)showBadgeNumber:(NSInteger)number index:(NSInteger)idx color:(UIColor *)color isNumber:(BOOL)isNumber;

使用示例: 在第一個標(biāo)題上展示有五個未讀消息
[pagesView showBadgeNumber:5 index:0 color:[UIColor greenColor] isNumber:YES];

其他可用delegate

/**
 已經(jīng)跳到的當(dāng)前界面
 @param controller 當(dāng)前控制器
 @param index 索引
 @param title 標(biāo)題
 */
- (void)xd_pagesViewDidChangeToController:(UIViewController *const)controller index:(NSInteger)index title:(NSString *)title {

}

/**
 豎直滾動監(jiān)聽
 @param changedy 豎直offset.y
 @param ceiling 是否已吸頂
 */
- (void)xd_pagesViewVerticalScrollOffsetyChanged:(CGFloat)changedy isCeiling:(BOOL)ceiling {

}

/**
 水平滾動監(jiān)聽
 @param changedx 水平offset.x
 @param currentPage 當(dāng)前頁
 @param willShowPage 目標(biāo)頁
 */
- (void)xd_pagesViewHorizontalScrollOffsetxChanged:(CGFloat)changedx currentPage:(NSInteger)currentPage willShowPage:(NSInteger)willShowPage {
    
}

/**
 自定義標(biāo)題寬度 (注意* 只有當(dāng)config.titleFlex=NO的時候,該代理才會生效)
 @param index 索引
 @param title 標(biāo)題
 */
- (CGFloat)xd_pagesViewTitleWidthForIndex:(NSInteger)index title:(NSString *)title {
    return 100;
}

詳細XDPagesConfig配置項

具體可參考demo中的<其他用法>

注意*:其中標(biāo)記了(??不可被刷新)的配置期犬,不會在調(diào)用- (void)reloadConfigs方法時刷新

/**
 titleBar的下劃指示線展示效果
 */
typedef NS_ENUM(NSInteger, SlideLineStyle) {
    XDSlideLine_None,          // 下劃線無展示效果
    XDSlideLine_Scale,         // 下劃線伸縮
    XDSlideLine_translation    // 下劃線平移(默認效果)
};

/**
 titleBar的標(biāo)題文字對齊方式
 */
typedef NS_ENUM(NSInteger, TitleVerticalAlignment) {
    XDVerticalAlignmentTop = 0, //標(biāo)題頂部垂直對齊
    XDVerticalAlignmentMiddle,  //標(biāo)題中部垂直對齊
    XDVerticalAlignmentBottom,  //標(biāo)題底部垂直對齊
};


@property (nonatomic, assign) NSInteger beginPage;                  // 起始頁(??不可被刷新)
@property (nonatomic, assign) NSInteger maxCacheCount;              // 最大緩存頁數(shù)
@property (nonatomic, assign) BOOL pagesSlideEnable;                // 是否可滑動翻頁(默認YES)
@property (nonatomic, assign) BOOL animateForPageChange;            // 頁面變動時是否需要動畫(默認YES)
@property (nonatomic, assign) BOOL pagesHorizontalBounce;           // 是否頁面邊界自由滑動(默認YES)

@property (nonatomic, assign) BOOL needTitleBar;                    // 是否需要標(biāo)題欄(默認YES)(??不可被刷新)
@property (nonatomic, assign) BOOL titleBarFitHeader;               // 是否標(biāo)題欄和header作為一個整體(默認NO)(??不可被刷新)
@property (nonatomic, assign) CGFloat titleBarHeight;               // 標(biāo)題欄高度(默認50)(??不可被刷新)
@property (nonatomic, assign) CGFloat titleBarMarginTop;            // 懸停位置距上端距離(默認0)
@property (nonatomic, assign) BOOL needTitleBarBottomLine;          // 是否需要標(biāo)題欄底線(默認YES)
@property (nonatomic, strong) UIColor *titleBarBottomLineColor;     // 底線顏色(默認淺灰色)
@property (nonatomic, assign) BOOL needTitleBarSlideLine;           // 是否需要下滑線(默認YES)
@property (nonatomic, assign) SlideLineStyle titleBarSlideLineStyle;// 下劃線跟隨方式
@property (nonatomic, assign) CGFloat titleBarSlideLineWidthRatio;  // 下滑線相對于當(dāng)前item寬的比例[0-1]
@property (nonatomic, strong) UIColor *titleBarSlideLineColor;      // 下滑線顏色(默認灰色)
@property (nonatomic, strong) UIColor *titleBarBackColor;           // 標(biāo)題欄背景色
@property (nonatomic, strong) UIImage *titleBarBackImage;           // 標(biāo)題欄背景圖
@property (nonatomic, assign) BOOL titleBarHorizontalBounce;        // 標(biāo)題欄是否可以邊界自由滑動(默認YES)
@property (nonatomic, strong) UIView *customTitleBar;               // 自定義標(biāo)題欄(??不可被刷新)

@property (nonatomic, strong) UIColor *titleItemBackColor;          // 標(biāo)題背景顏色
@property (nonatomic, strong) UIColor *titleItemBackHightlightColor;// 標(biāo)題選中時背景顏色
@property (nonatomic, strong) UIImage *titleItemBackImage;          // 標(biāo)題背景圖片
@property (nonatomic, strong) UIImage *titleItemBackHightlightImage;// 標(biāo)題選中時的背景圖片

@property (nonatomic, assign) BOOL titleFlex;                       // 是否自動計算標(biāo)題寬(默認YES)
@property (nonatomic, assign) BOOL titleGradual;                    // 是否采用漸變方式(默認YES,只漸變標(biāo)題屬性)
@property (nonatomic, assign) TitleVerticalAlignment titleVerticalAlignment; // 標(biāo)題豎直對齊方式
@property (nonatomic, strong) UIColor *titleTextColor;              // 標(biāo)題顏色
@property (nonatomic, strong) UIColor *titleTextHightlightColor;    // 標(biāo)題選中時的顏色
@property (nonatomic, strong) UIFont *titleFont;                    // 標(biāo)題字號大小(默認16)
@property (nonatomic, strong) UIFont *titleHightlightFont;          // 選中后的字號大小(默認18)

@property (nonatomic, assign) BOOL needRightBtn;                    // 是否需要右按鈕(默認NO)(??不可被刷新)
@property (nonatomic, assign) CGSize rightBtnSize;                  // 右按鈕大小
@property (nonatomic, strong) UIView *rightBtn;                     // 右按鈕自定義視圖

效果展示(XDPagesView2.0)

頭部下拉刷新:


show1.gif

列表下拉刷新:


show2.gif

標(biāo)題一體
show3.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末河哑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子龟虎,更是在濱河造成了極大的恐慌灾馒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遣总,死亡現(xiàn)場離奇詭異睬罗,居然都是意外死亡,警方通過查閱死者的電腦和手機旭斥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門容达,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人垂券,你說我怎么就攤上這事花盐∠刍” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵算芯,是天一觀的道長柒昏。 經(jīng)常有香客問我,道長熙揍,這世上最難降的妖魔是什么职祷? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮届囚,結(jié)果婚禮上有梆,老公的妹妹穿的比我還像新娘。我一直安慰自己意系,他們只是感情好泥耀,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛔添,像睡著了一般痰催。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迎瞧,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天陨囊,我揣著相機與錄音,去河邊找鬼夹攒。 笑死,一個胖子當(dāng)著我的面吹牛胁塞,可吹牛的內(nèi)容都是我干的咏尝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼啸罢,長吁一口氣:“原來是場噩夢啊……” “哼编检!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扰才,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤允懂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后衩匣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕾总,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年琅捏,在試婚紗的時候發(fā)現(xiàn)自己被綠了生百。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡柄延,死狀恐怖蚀浆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤丧鸯,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布肛冶,位于F島的核電站刽宪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撩满。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一据忘、第九天 我趴在偏房一處隱蔽的房頂上張望鹦牛。 院中可真熱鬧,春花似錦勇吊、人聲如沸曼追。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礼殊。三九已至,卻和暖如春针史,著一層夾襖步出監(jiān)牢的瞬間晶伦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工啄枕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留婚陪,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓频祝,卻偏偏與公主長得像泌参,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子常空,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容