一點view視圖的封裝

? ? ? ? 應(yīng)該很長時間了,朋友給了一個項目源碼夭委,讓我從中學(xué)習(xí)一下幅狮。之前看他的項目的時候感覺邏輯很復(fù)雜,也不知道用的什么設(shè)計模式闰靴。感覺他就是把很復(fù)雜的View自己封裝了一下,然后留出本視圖和父視圖交互的方法钻注。

? ? ? ? 可能是機(jī)遇的問題蚂且,一直沒有遇到很復(fù)雜的界面,技術(shù)成長的也很慢幅恋。在現(xiàn)在的公司杏死,剛完成了一個小小項目。老板讓UI給了設(shè)計圖,讓我按著設(shè)計圖改淑翼。在這過程中雖然要改的很多腐巢,有的功能可能需要重寫。很高興玄括,也暴露出了自己的水平冯丙,改了一個界面,認(rèn)認(rèn)真的改了半天遭京,把之前的刪了胃惜,按設(shè)計的重新寫。

? ? ? ? 我封裝的小視圖是下面帶有藍(lán)色按鈕的那個視圖哪雕,那四個按鈕放在了一個View里面船殉,然后和黑色透明的部分一起放到封裝的view里面。

很low的小小項目圖片

子視圖與父視圖交互使用Block斯嚎,在要瘋轉(zhuǎn)的子視圖中添加了一個block屬性利虫。

?@property (nonatomic, copy)void(^OrderBtnAction)(UIButton *btn);

我選擇了根據(jù)按鈕的題目創(chuàng)建按鈕

- (instancetype) initWithFrame:(CGRect)frame AndBtnTitles:(NSArray *)titles;

在.m文件中,我聲明了一個數(shù)組btnArray來存放各個按鈕堡僻,以后用用這些按鈕糠惫,把他們設(shè)置為非選中狀態(tài),還聲明了一個數(shù)組的個數(shù)btnNum苦始,(現(xiàn)在看來是不需要這個屬性了)

@property (nonatomic, assign) NSInteger btnNum;

@property?(nonatomic,?strong)?NSMutableArray?*btnArray;

然后就是方法的實現(xiàn)了

- (instancetype)initWithFrame:(CGRect)frame AndBtnTitles:(NSArray *)titles {

self.btnNum = titles.count;

按鈕的款

CGFloat btnWidth = kSize(55);

按鈕的高

CGFloat btnHeight = kSize(20);

左側(cè)按鈕距離邊界的距離

CGFloat margin = kSize(8);

按鈕之間的距離 ?

CGFloat space = (frame.size.width - titles.count * btnWidth - margin * 2) / (titles.count - 1);

CGFloat positionX = frame.origin.x;

CGFloat positionY = frame.origin.y;

先設(shè)置陰影背景

if (self = [super initWithFrame:CGRectMake(frame.origin.x, frame.origin.y,? kScreenW - positionX,? kScreenH-positionY)]) {

self.backgroundColor = kUIColorFromRGBA(0x000000, 0.4);

再創(chuàng)建承載按鈕的view

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];

view.backgroundColor = kUIColorFromRGB(0xf3f3f3);

[self addSubview:view];

然后循環(huán)創(chuàng)建按鈕了

for (int i = 0; i < titles.count; i ++) {

UIButton *btn = [[UIButton alloc] init];

[view addSubview:btn];

還使用了Masonry布局

[btn mas_makeConstraints:^(MASConstraintMaker *make) {

make.left.mas_equalTo(margin + (btnWidth + space)*i);

make.centerY.mas_equalTo(0);

make.size.mas_equalTo(CGSizeMake(btnWidth, btnHeight));

}];

[btn setTitle:titles[i] forState:UIControlStateNormal];

[btn setTitle:titles[i] forState:UIControlStateSelected];

btn.titleLabel.font = [UIFont systemFontOfSize:kSize(13)];

[btn setTitleColor:kUIColorFromRGB(0x666666) forState:UIControlStateNormal];

[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];

設(shè)置按鈕的背景色寞钥,后面有些

[btn setBackgroundColor:kUIColorFromRGB(0x29a0f3) forState:UIControlStateSelected];

非選中后clear顏色就沒喲圓角框框了

[btn setBackgroundColor:[UIColor clearColor] forState:UIControlStateNormal];

主頁面會根據(jù)這個i刷新相應(yīng)類型的數(shù)據(jù)的

btn.tag = i;

btn.layer.borderWidth = 0;

btn.layer.cornerRadius = 3;

btn.clipsToBounds = YES;

[btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];

默認(rèn)第一個是選中狀態(tài)的

if (i == 0) {

btn.selected = YES;

}

[self.btnArray addObject:btn];

}

}

return self;

}

當(dāng)出發(fā)一個按鈕事件時,向?qū)⑵渌陌粹o變?yōu)榉沁x中狀態(tài)陌选,然后將本按鈕設(shè)為選中狀態(tài)理郑。

- (void)btnAction:(UIButton *)sender {

for (int i = 0; i < self.btnNum; i ++) {

((UIButton *)self.btnArray[i]).selected = NO;

}

將本按鈕發(fā)給主視圖

self.OrderBtnAction(sender);

}

- (NSMutableArray *)btnArray {

if(_btnArray == nil) {

_btnArray = [[NSMutableArray alloc] init];

}

return _btnArray;

}


在使用時 創(chuàng)建視圖

_orderView = [[JKXOrderView alloc] initWithFrame:CGRectMake(0, kSize(40), kScreenWidth, kSize(36)) AndBtnTitles:@[@"時間降序", @"時間升序", @"重要降序", @"重要升序"]];

先隱藏

_orderView.hidden?=?YES;

[self.view?addSubview:_orderView];

__block?typeof(self)?bself?=?self;

點擊按鈕后

self.orderView.OrderBtnAction?=?^(UIButton?*btn){

[bself.orderBtn?setTitle:@[@"時間降序",?@"時間升序",?@"重要降序",?@"重要升序"][btn.tag]?forState:UIControlStateNormal];

設(shè)置標(biāo)簽內(nèi)容

bself.classIndex?=?btn.tag;

然后刷新了數(shù)據(jù)

[bself.tableView.mj_header?beginRefreshing];

將本按鈕設(shè)為選中,選中狀態(tài)底色為藍(lán)色

btn.selected?=?YES;

然后隱藏自己的視圖

bself.orderView.hidden?=?YES;

和那個三角

bself.triangleView.hidden?=?YES;


根據(jù)狀態(tài)設(shè)置按鈕背景色寫了一個小分類

- (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state {

[self?setBackgroundImage:[UIButton?imageWithColor:backgroundColor]?forState:state];

}

畫一個帶顏色的小圖片

+(UIImage *)imageWithColor:(UIColor *)color {

CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);

UIGraphicsBeginImageContext(rect.size);

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context, color.CGColor);

CGContextFillRect(context, rect);

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return image;

}

我的十六進(jìn)制顏色宏

#define kUIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

//?帶透明度是十六進(jìn)制顏色

#define?kUIColorFromRGBA(rgbValue,a)?[UIColor?colorWithRed:((float)((rgbValue?&?0xFF0000)?>>?16))/255.0?green:((float)((rgbValue?&?0xFF00)?>>?8))/255.0?blue:((float)(rgbValue?&?0xFF))/255.0?alpha:(a)]


寫完了咨油,不知道別人能不能看懂您炉,感覺我表達(dá)有問題地的歡迎提意見,我自己是找不到的役电。

還是希望有同行的大牛幫忙指點指點赚爵,感激不盡。公司只有我自己法瑟,不知道和誰交流呢冀膝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市霎挟,隨后出現(xiàn)的幾起案子窝剖,更是在濱河造成了極大的恐慌,老刑警劉巖酥夭,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赐纱,死亡現(xiàn)場離奇詭異脊奋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疙描,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門诚隙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人起胰,你說我怎么就攤上這事久又。” “怎么了待错?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵籽孙,是天一觀的道長。 經(jīng)常有香客問我火俄,道長犯建,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任瓜客,我火速辦了婚禮适瓦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谱仪。我一直安慰自己玻熙,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布疯攒。 她就那樣靜靜地躺著嗦随,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敬尺。 梳的紋絲不亂的頭發(fā)上枚尼,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機(jī)與錄音砂吞,去河邊找鬼署恍。 笑死,一個胖子當(dāng)著我的面吹牛蜻直,可吹牛的內(nèi)容都是我干的盯质。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼概而,長吁一口氣:“原來是場噩夢啊……” “哼呼巷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赎瑰,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤王悍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乡范,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體配名,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年晋辆,在試婚紗的時候發(fā)現(xiàn)自己被綠了渠脉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓶佳,死狀恐怖芋膘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霸饲,我是刑警寧澤为朋,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站厚脉,受9級特大地震影響习寸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜傻工,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一霞溪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧中捆,春花似錦鸯匹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蟋滴,卻和暖如春染厅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脓杉。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工糟秘, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人球散。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓尿赚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蕉堰。 傳聞我的和親對象是個殘疾皇子凌净,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

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