ZZFLEX 使用

?? 使用 ZZFLEX 框架的模版代碼挡毅。

命令式的列表控制器:ZZFLEXAngel

初始化 Angle

// tableView

UITableView *tableView = self.view.addTableView(0).view;

ZZFLEXAngel *angel = [[ZZFLEXAngel alloc] initWithHostView:tableView];

// collectionView

UICollectionView *collectionView = self.view.addCollectionView(1).view;

ZZFLEXAngel *angel2 = [[ZZFLEXAngel alloc] initWithHostView:collectionView];

頁(yè)面容器層(hostView)

- (void)reloadListUI
{
    // 清空所有數(shù)據(jù)
    self.clear();
    
    // 添加section 1
    {
        // section 標(biāo)識(shí)
        NSInteger sectionType = 1;
        /*
         添加section
         sectionInsets: section邊距
         minimumLineSpacing: 行間距
         minimumInteritemSpacing: 列間距
         */
        self.angel.addSection(sectionType).sectionInsets(UIEdgeInsetsMake(15, 15, 15, 15)).minimumLineSpacing(15).minimumInteritemSpacing(15);
        
        /// 設(shè)置section header,footer亦然
        self.angel.setHeader([UICollectionReusableView class]).toSection(sectionType);
        
        /*
         往section添加cell
         withDataModel:cell數(shù)據(jù)模型
         selectedAction:cell點(diǎn)擊事件
         eventAction: cell內(nèi)部事件,業(yè)務(wù)方自行設(shè)置和調(diào)用溉愁,eventType為事件類型草娜、model是事件數(shù)據(jù)
         viewTag: cell標(biāo)識(shí)羞迷,便于調(diào)試,或用于查找定位或作為插入其他cell的錨點(diǎn)
         */
        self.angel.addCell([UICollectionViewCell class]).toSection(sectionType).withDataModel(@"hello")
        .selectedAction(^ (id model) {
            NSLog(@"cell 點(diǎn)擊事件");
        })
        .eventAction(^ id(NSInteger eventType, id model) {
            NSLog(@"cell 內(nèi)部事件萝招,類型:%ld, 模型: %@", eventType, model);
            return nil;
        })
        .viewTag(10001);
        
        /*
         往section批量添加cell
         withDataModelArray:cell數(shù)據(jù)模型數(shù)組,cell個(gè)數(shù)由數(shù)組元素個(gè)數(shù)決定
         delegate:為cell設(shè)置代理
         */
        self.angel.addCells([UICollectionViewCell class]).toSection(sectionType).withDataModelArray(@[@"1", @"2", @"3"])
        .selectedAction(^ (id model) {
            NSLog(@"cell 點(diǎn)擊事件存捺,數(shù)據(jù)模型為:%@", model);
        }).delegate(self);
    }
    
    // 刷新數(shù)據(jù)
    [self.angel reloadView];
}

元素層

/**
 * 所有要加入 ZZFLEXAngel槐沼、ZZFLEX*ViewController 的 view/cell 都要實(shí)現(xiàn)此協(xié)議
 *
 * 除獲取大小/高度兩個(gè)方法需要二選一之外,其余都可按需選擇實(shí)現(xiàn)
 */

@protocol ZZFlexibleLayoutViewProtocol <NSObject>

@optional;
/**
 * 獲取cell/view大小召噩,與viewHeightByDataModel二選一
 * 僅 CollectionView 可選擇使用
 *
 * 調(diào)用時(shí)機(jī):添加到ZZFlexibleLayoutViewController或ZZFLEXAngel時(shí)母赵,如實(shí)現(xiàn)僅調(diào)用一次后,大小會(huì)緩存在ViewModel中具滴。
 * 其他:如需更新視圖大小凹嘲,需手動(dòng)調(diào)用update方法
 * 小Tips:0至-1表示比例,如size.width=-0.5時(shí)构韵,表示視圖的寬度為列表寬度的50%
 */
+ (CGSize)viewSizeByDataModel:(id)dataModel;

/**
 * 獲取cell/view高度周蹭,與viewSizeByDataModel二選一
 * CollectionView、TableView 均可選擇使用
 *
 * 調(diào)用時(shí)機(jī):添加到ZZFlexibleLayoutViewController或ZZFLEXAngel時(shí)疲恢,如實(shí)現(xiàn)僅調(diào)用一次后凶朗,高度會(huì)緩存在ViewModel中。
 * 其他:如需更新視圖高度显拳,需手動(dòng)調(diào)用update方法
 * 小Tips:CollectionView也可用此方法棚愤,寬度默認(rèn)為-1,即列表寬度
 */
+ (CGFloat)viewHeightByDataModel:(id)dataModel;

/**
 * 設(shè)置cell/view的數(shù)據(jù)源
 *
 * 調(diào)用時(shí)機(jī):cellForRowAtIndexPath或者cellForItemAtIndexPath,如實(shí)現(xiàn)每次都會(huì)調(diào)用
 * 小Tips:如果模型未變化時(shí)不需要更新UI宛畦,建議在此方法執(zhí)行時(shí)做判斷直接return
 */
- (void)setViewDataModel:(id)dataModel;

/**
 * 設(shè)置cell/view的delegate對(duì)象
 *
 * 調(diào)用時(shí)機(jī):cellForRowAtIndexPath或者cellForItemAtIndexPath瘸洛,如實(shí)現(xiàn)每次都會(huì)調(diào)用
 */
- (void)setViewDelegate:(id)delegate;

/**
 * 設(shè)置cell/view的actionBlock
 *
 * 調(diào)用時(shí)機(jī):cellForRowAtIndexPath或者cellForItemAtIndexPath,如實(shí)現(xiàn)每次都會(huì)調(diào)用
 */
- (void)setViewEventAction:(id (^)(NSInteger actionType, id data))eventAction;

/**
 * 當(dāng)前視圖的indexPath次和,所在section元素?cái)?shù)(目前僅cell調(diào)用)
 *
 * 調(diào)用時(shí)機(jī):cellForRowAtIndexPath或者cellForItemAtIndexPath反肋,如實(shí)現(xiàn)每次都會(huì)調(diào)用
 * 小Tips:可用于UI差異化設(shè)置等,不建議cell持有indexPath踏施,因?yàn)榭赡軙?huì)經(jīng)常變
 */
- (void)onViewPositionUpdatedWithIndexPath:(NSIndexPath *)indexPath sectionItemCount:(NSInteger)count;

@end

Foundation 擴(kuò)展

/// 創(chuàng)建style
NSMutableParagraphStyle *style = NSMutableParagraphStyle.zz_create.lineSpacing(5).paragraphSpacing(20).alignment(NSTextAlignmentCenter).lineBreakMode(NSLineBreakByWordWrapping).object;
/// 編輯style(整段縮進(jìn)石蔗、右側(cè)縮進(jìn)或顯示寬度)
style.zz_setup.headIndent(20).tailIndent(20);

/// 創(chuàng)建富文本
NSMutableAttributedString *attrStr = NSMutableAttributedString.zz_create(@"富文本字符串").backgroundColor([UIColor redColor]).font([UIFont systemFontOfSize:32]).foregroundColor([UIColor redColor]).object;
/// 編輯富文本(拼接圖片、字符串畅形、富文本等)
attrStr.zz_setup.paragraphStyle(style).appendString(@"拼接字符串").appendImage([UIImage imageNamed:@"要拼接的圖片名稱.png"], CGRectMake(0, 0, 20, 20));
/// 設(shè)置富文本屬性(帶range)
attrStr.zz_setup.fontWithRange([UIFont boldSystemFontOfSize:12], NSMakeRange(0, 10)).foregroundColorWithRange([UIColor blueColor], NSMakeRange(0, 10));

UIView 擴(kuò)展:分割線养距、圓角

/*
 添加分割線
 type:支持top、bottom束亏、left铃在、right、centerX碍遍、centerY定铜,同一view可執(zhí)行多個(gè)addSeparatorz操作
 beginAt:開始位置偏移,默認(rèn)0
 endAt: 結(jié)束位置偏移怕敬,默認(rèn)0揣炕;也可設(shè)置length屬性代替
 offset: 具type類型偏移,默認(rèn)0(-10為距離底端10)
 */
self.view.addSeparator(ZZSeparatorPositionTop).color([UIColor grayColor]).beginAt(15).endAt(-15).offset(-10);
self.view.removeSeparator(ZZSeparatorPositionTop);

/*
 設(shè)置圓角
 cornor: 支持topLeft东跪、topRight畸陡、bottomLeft、bottomRight虽填、top丁恭、bottom、left斋日、right牲览、all,支持邏輯或
 */
self.view.setCornor(ZZCornerPositionLeft | ZZCornerPositionTop).radius(5.0f).color([UIColor grayColor]).borderWidth(1);
self.view.removeCornor();

UIView 擴(kuò)展:UIButton

UIButton *button = self.view.addButton(1)
// 設(shè)置字體恶守,各狀態(tài)字色第献、背景色
.titleFont([UIFont systemFontOfSize:12])
.titleColor([UIColor blackColor]).titleColorHL([UIColor redColor]).titleColorDisabled([UIColor grayColor])
.backgroundColor([UIColor whiteColor]).backgroundColorHL([UIColor yellowColor])
// 設(shè)置圓角、陰影
.cornerRadius(5.0f).shadow(CGSizeZero, 5.0f, [UIColor grayColor], 1.0)
// 設(shè)置事件
.eventTouchDown(^ (UIButton *sender) {
    NSLog(@"touch down");
})
.eventTouchUpInside(^ (UIButton *sender) {
    NSLog(@"touch inside");
})
// 設(shè)置約束(Masonry)
.masonry(^ (UIButton *sender, MASConstraintMaker *make) {
    make.left.top.mas_equalTo(0);
    make.size.mas_equalTo(CGSizeMake(80, 30));
})
.view;


// 編輯控件的屬性
button.zz_setup.title(@"hello").titleFont([UIFont boldSystemFontOfSize:32]);


// 單獨(dú)創(chuàng)建一個(gè)控件兔港,而不添加到視圖上
UIButton *button = UIButton.zz_create(1001).title(@"hello").titleHL(@"world").view;

UIView 擴(kuò)展:UIImage

// 右側(cè)箭頭圖片
self.contentView.addImageView(2)
.image([UIImage imageNamed:@"arrow"])
.masonry(^(UIView *senderView, MASConstraintMaker *make) {
    make.right.mas_equalTo(-15);
    make.centerY.mas_equalTo(0);
});

UIView 擴(kuò)展:UILabel

self.titleLabel = self.contentView.addLabel(1)
.font([UIFont boldSystemFontOfSize:16])
.textColor([UIColor blackColor])
.masonry(^(UIView *senderView, MASConstraintMaker *make) {
    make.left.mas_equalTo(15);
    make.centerY.mas_equalTo(0);
    make.right.mas_lessThanOrEqualTo(-35);
})
.view;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庸毫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子衫樊,更是在濱河造成了極大的恐慌飒赃,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盒揉,居然都是意外死亡晋被,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門刚盈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挂脑,你說(shuō)我怎么就攤上這事藕漱。” “怎么了崭闲?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵肋联,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我刁俭,道長(zhǎng)橄仍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任牍戚,我火速辦了婚禮侮繁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘如孝。我一直安慰自己宪哩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布第晰。 她就那樣靜靜地躺著锁孟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茁瘦。 梳的紋絲不亂的頭發(fā)上品抽,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音甜熔,去河邊找鬼圆恤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纺非,可吹牛的內(nèi)容都是我干的哑了。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烧颖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼弱左!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起炕淮,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拆火,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體们镜,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡币叹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了模狭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颈抚。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嚼鹉,靈堂內(nèi)的尸體忽然破棺而出贩汉,到底是詐尸還是另有隱情,我是刑警寧澤锚赤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布匹舞,位于F島的核電站,受9級(jí)特大地震影響线脚,放射性物質(zhì)發(fā)生泄漏赐稽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一浑侥、第九天 我趴在偏房一處隱蔽的房頂上張望姊舵。 院中可真熱鬧,春花似錦锭吨、人聲如沸蠢莺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)躏将。三九已至,卻和暖如春考蕾,著一層夾襖步出監(jiān)牢的瞬間祸憋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工肖卧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚯窥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓塞帐,卻偏偏與公主長(zhǎng)得像拦赠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子葵姥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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