iOS以內(nèi)聚的方式添加控件

出發(fā)點(diǎn)

每次添加控件都需要addSubview:
其次控件的屬性設(shè)置恼五、方法經(jīng)常跨函數(shù),無(wú)法快速查找

對(duì)比

常規(guī)設(shè)置

    self.titleLabel = [[UILabel alloc]init];
    self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
    self.titleLabel.textColor = [UIColor darkTextColor];
    self.titleLabel.textAlignment = NSTextAlignmentCenter;
    self.titleLabel.font = [UIFont systemFontOfSize:20];
    [self.navView addSubview:self.titleLabel];
    self.titleLabel.hh_centerX = 0;
    self.titleLabel.hh_centerY = 0;
    self.titleLabel.hh_centerYCS.constant = 11;

優(yōu)化后

    [self.view hh_addLabel:^(UILabel *label) {
        self.label = label;
        label.textColor = [UIColor redColor];
        label.font = [UIFont systemFontOfSize:15];
        label.textAlignment = NSTextAlignmentCenter;
    } constraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.view).offset(100);
        make.centerX.equalTo(self.view);
    }];

button:方法

    [self.view hh_addButton:^(UIButton *button) {
        self.button = button;
        [button setImage:[UIImage imageNamed:@"action_picture"] forState:UIControlStateNormal];
    } action:^(UIButton *sender) {//button點(diǎn)擊事件
        NSLog(@"點(diǎn)擊了按鈕");
    } constraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.label).offset(50);
        make.centerX.equalTo(self.view);
    }];

textField:方法


    [self.view hh_addTextField:^(UITextField *textField) {
        self.textField = textField;
        textField.borderStyle = UITextBorderStyleRoundedRect;
        textField.placeholder = @"請(qǐng)輸入文字,不超過十個(gè)字";
        [textField setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
        textField.maxCharacters = 10;//設(shè)置最大字?jǐn)?shù)
    } action:^(UITextField *textField, BOOL isOverMax) {//字?jǐn)?shù)改變回調(diào)
        NSLog(@"isOverMax==YES,超過了字?jǐn)?shù)限制");
    } constraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.button.mas_bottom).offset(50);
        make.centerX.equalTo(self.view);
    }];

說明

1、為何第一個(gè)屬性設(shè)置block不需要弱引用歧寺,此和masonry等同,并沒有對(duì)象引用block棘脐,屬性設(shè)置之后就會(huì)被釋放斜筐。
2、action事件以對(duì)象的內(nèi)存地址為key存儲(chǔ)在actionDict中蛀缝,actionblock中需要使用弱引用顷链。當(dāng)然也可以不用,只需要打破環(huán)路即可屈梁,把視圖的actionDict置為nil即可嗤练,詳見Demo。在基類調(diào)用如下函數(shù):

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    if (!self.navigationController.topViewController)///過濾非銷毀的視圖在讶,如push進(jìn)來的上層界面
    [self enumSubViewsTree:self.view];
}
- (void)enumSubViewsTree:(UIView *)view
{//遞歸遍歷子控件煞抬,把存有block的actionDict置為nil
    if (view.actionDict) view.actionDict = nil;
    for (UIView *subV in view.subviews)[self enumSubViewsTree:subV];
}

3、此分類包含了常用的控件构哺,需要依賴第三方框架masonry
4革答、之所以為務(wù)虛篇,是因?yàn)榇朔诸惒]有改變實(shí)際的代碼量曙强,只是以高內(nèi)聚的形式展示残拐,聚合了屬性,事件以及約束碟嘴。

下載地址:Demo地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溪食,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子娜扇,更是在濱河造成了極大的恐慌眠菇,老刑警劉巖边败,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捎废,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)致燥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門登疗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嫌蚤,你說我怎么就攤上這事辐益。” “怎么了脱吱?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵智政,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我箱蝠,道長(zhǎng)续捂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任宦搬,我火速辦了婚禮牙瓢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘间校。我一直安慰自己矾克,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布憔足。 她就那樣靜靜地躺著胁附,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滓彰。 梳的紋絲不亂的頭發(fā)上控妻,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音找蜜,去河邊找鬼饼暑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛洗做,可吹牛的內(nèi)容都是我干的弓叛。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼诚纸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼撰筷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起畦徘,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤毕籽,失蹤者是張志新(化名)和其女友劉穎抬闯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體关筒,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溶握,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒸播。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睡榆。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖袍榆,靈堂內(nèi)的尸體忽然破棺而出胀屿,到底是詐尸還是另有隱情,我是刑警寧澤包雀,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布宿崭,位于F島的核電站,受9級(jí)特大地震影響才写,放射性物質(zhì)發(fā)生泄漏葡兑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一琅摩、第九天 我趴在偏房一處隱蔽的房頂上張望铁孵。 院中可真熱鬧,春花似錦房资、人聲如沸蜕劝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岖沛。三九已至,卻和暖如春搭独,著一層夾襖步出監(jiān)牢的瞬間婴削,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工牙肝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唉俗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓配椭,卻偏偏與公主長(zhǎng)得像虫溜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子股缸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,341評(píng)論 25 707
  • 小時(shí)候衡楞,村里面都是四合宅院,從我家穿過門前的胡同一直往南走敦姻,走到胡同盡頭瘾境,有一顆歪脖子大槐樹歧杏,樹已經(jīng)被蟲子蛀的不成...
    張鋒字東海閱讀 462評(píng)論 0 0