iOS-Study自定義視圖view封裝彈框AlterView

前言:我們開發(fā)的時候經(jīng)常會自定義一些view,以備后用,今天從簡書上看到一篇用view封裝彈框的文章梯澜,就拿來學(xué)習(xí)學(xué)習(xí)姻锁。封裝一下枕赵,以備學(xué)習(xí),感謝那位作者位隶。

效果圖:


自定義AlterView.gif

目錄:
1.簡單的思路
2.代碼示例
3.使用方法
4.學(xué)習(xí)要點
5.思路總結(jié)
6.學(xué)習(xí)體會
7.Demo地址以及原作者地址

  • 簡單的思路:
    1.創(chuàng)建一個繼承于UIView的類
    2.設(shè)置類所需的子控件
    3.在創(chuàng)建一個類方法拷窜,供于外部調(diào)去,屬性傳值涧黄,以及block回調(diào)篮昧。
    利用block將點擊事件傳遞到外部類中。
  • 代碼示例:

ZYAlterView.h
#import <UIKit/UIKit.h>

  /**取消按鈕點擊事件*/
  typedef void (^cancelBlock)();
  /**確定按鈕點擊事件*/
  typedef void (^sureBlock)();
  @interface ZYAlterView : UIView
  /**失敗回調(diào)*/
  @property(copy,nonatomic) cancelBlock cancel_block;
  /**成功回調(diào)*/
  @property(copy,nonatomic) sureBlock sure_block;
  /**
    *
    *  @param title           標(biāo)題
    *  @param content         內(nèi)容
    *  @param cancel          取消按鈕內(nèi)容
    *  @param sure            確定按鈕內(nèi)容
    *  @param cancelBlock   取消按鈕點擊事件
    *  @param sureBlock     確定按鈕點擊事件
    *
    *  @return ZYAlterView
    */
   +(instancetype)alterViewWithTitle:(NSString *)title
                             content:(NSString *)content
                              cancel:(NSString *)cancel
                                sure:(NSString *)sure
                  cancel_Block_Clcik:(cancelBlock)cancelBlock
                    sure_Block_Click:(sureBlock)sureBlock;
    @end

解析:

  • 首先笋妥,在.h文件懊昨,創(chuàng)建兩個block的別名(成功和失敗的回調(diào)),用于把按鈕的點擊事件傳到外界春宣,有良好的溝通酵颁。
  • 其次,創(chuàng)建一個類方法-要把你封裝的AlterView,所需的屬性月帝,從外界傳進(jìn)來躏惋,在通過block進(jìn)行回調(diào)。也就是嚷辅,從外界傳進(jìn)來的屬性簿姨,需要我們從外界調(diào)用此方法,并設(shè)置AlterView的屬性值簸搞。

ZYAlterView.m
#import "ZYAlterView.h"

   #define KSCREEN_W  [UIScreen mainScreen].bounds.size.width
   #define KSCREEN_H   [UIScreen mainScreen].bounds.size.height
   @interface ZYAlterView ()
    /**標(biāo)題lable*/
    @property(strong,nonatomic)UILabel *titleLab;
    /**內(nèi)容lable*/
    @property(strong,nonatomic)UILabel *contentLab;
    /**取消Btn*/
    @property(strong,nonatomic)UIButton *cancelBtn;
    /**確定Btn*/
    @property(strong,nonatomic)UIButton *sureBtn;
    /**標(biāo)題*/
    @property(copy,nonatomic)NSString *title;
    /**內(nèi)容*/
    @property(copy,nonatomic)NSString *content;
    /**取消*/
    @property(copy,nonatomic)NSString *cancelTitle;
    /**確定*/
    @property(copy,nonatomic)NSString *sureTitle;
    @end
    @implementation ZYAlterView
    #pragma mark - 初始化(添加控件)
    - (instancetype)initWithFrame:(CGRect)frame
    {
        self =  [super initWithFrame:frame];
        if (self) {
    >
    //   標(biāo)題
    _titleLab = [[UILabel alloc]initWithFrame:(CGRect){0,0,self.bounds.size.width,50}];
    _titleLab.textAlignment = NSTextAlignmentCenter;
    _titleLab.textColor = [UIColor blackColor];
    [self addSubview:_titleLab];
    >
    //   內(nèi)容
    _contentLab = [[UILabel alloc]initWithFrame:(CGRect){0,CGRectGetMaxY(_titleLab.frame),self.bounds.size.width,50}];
    _contentLab.textAlignment = NSTextAlignmentCenter;
    _contentLab.textColor = [UIColor redColor];
    [self addSubview:_contentLab];
    >
    //   取消按鈕
    _cancelBtn = [[UIButton alloc]initWithFrame:(CGRect){0,CGRectGetMaxY(_contentLab.frame),self.bounds.size.width/2,50}];
    _cancelBtn.layer.borderColor = [UIColor grayColor].CGColor;
    _cancelBtn.layer.borderWidth = 0.5;
    [_cancelBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [_cancelBtn addTarget:self action:@selector(cancelBtClick) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:_cancelBtn];
    >
    //   確定按鈕
    _sureBtn = [[UIButton alloc]initWithFrame:(CGRect){self.bounds.size.width/2,CGRectGetMaxY(_contentLab.frame),self.bounds.size.width/2,50}];
    _sureBtn.layer.borderColor = [UIColor grayColor].CGColor;
    _sureBtn.layer.borderWidth = 0.5;
    [_sureBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [_sureBtn addTarget:self action:@selector(sureBtClick) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:_sureBtn];
   }
     return self;
   }
  #pragma mark----實現(xiàn)類方法
  +(instancetype)alterViewWithTitle:(NSString *)title
                                      content:(NSString *)content
                                       cancel:(NSString *)cancel
                                          sure:(NSString *)sure
                  cancel_Block_Clcik:(cancelBlock)cancelBlock
                      sure_Block_Click:(sureBlock)sureBlock
    {
      ZYAlterView *alterView = [[ZYAlterView alloc]initWithFrame:(CGRect){0,0,250,150}];
      alterView.backgroundColor = [UIColor whiteColor];
      alterView.center = (CGPoint){KSCREEN_W/2,KSCREEN_H/2};
      alterView.layer.cornerRadius = 5;
      alterView.layer.masksToBounds = YES;
      alterView.title=title;
      alterView.content=content;
      alterView.cancelTitle=cancel;
      alterView.sureTitle=sure;
      alterView.cancel_block=cancelBlock;
      alterView.sure_block=sureBlock;
      return alterView;
      }
    #pragma mark--給屬性重新賦值
    -(void)setTitle:(NSString *)title
    {
        _titleLab.text  = title;
    }
    -(void)setContent:(NSString *)content
   {
      _contentLab.text = content;
   }
    -(void)setSureTitle:(NSString *)sureTitle
  {
     [_sureBtn setTitle:sureTitle forState:UIControlStateNormal];
  }
  - (void)setCancelTitle:(NSString *)cancelTitle
  {
    [_cancelBtn setTitle:cancelTitle forState:UIControlStateNormal];
  }
  #pragma mark----取消按鈕點擊事件
  -(void)cancelBtClick
  {
      [self removeFromSuperview];
      self.cancel_block();
  }
  #pragma mark----確定按鈕點擊事件
  -(void)sureBtClick
  {
      [self removeFromSuperview];
      self.sure_block();
     }
  @end

解析:
通過init初始化控件扁位,在通過自定義的類方法,創(chuàng)建自定義的類攘乒,對其屬性進(jìn)行賦值贤牛,但是,此時则酝,控件沒有值。其實闰集,為其屬性賦值沽讹,就是寫其屬性的set方法,通過set方法武鲁,給本類上的控件賦值爽雄。如上代碼。

  • 使用方法:

在ViewController.m中 導(dǎo)入"#import "ZYAlterView.h""頭文件調(diào)用代碼:
ZYAlterView *alterView = [ZYAlterView alterViewWithTitle:@"自定義彈框?qū)W習(xí)" content:@"虛心學(xué)習(xí)沐鼠,真愛生命挚瘟!" cancel:@"取消" sure:@"確定" cancel_Block_Clcik:^{

    //取消按鈕點擊事件
  NSLog(@"取消");
   } sure_Block_Click:^{
    //確定按鈕點擊事件
    NSLog(@"確定");
   }];

ZYAlterView直接封裝成了類方法叹谁,并且可以手動填寫標(biāo)題,內(nèi)容乘盖,取消按鈕的內(nèi)容焰檩,確定按鈕的內(nèi)容,還有一個需要注意的就是筆者將取消按鈕和確定按鈕的點擊事件利用block傳遞出來了,這點值得我們學(xué)習(xí)订框。

  • 學(xué)習(xí)要點:
    1.取消按鈕和確定按鈕的點擊事件利用block傳遞出來
    2.set方法傳值
    3.自定義UIView思想的學(xué)習(xí)
  • 思路總結(jié):

因為筆者將該view封裝成了類方法析苫,所以會調(diào)用這個類時會先執(zhí)行
+(instancetype)alterViewWithTitle:(NSString *)title...
方法,緊接著執(zhí)行
-(instancetype)initWithFrame:(CGRect)frame
方法穿扳,然后會繼續(xù)執(zhí)行alterView.title=title;屬性賦值的方法衩侥,但是這時界面展示不出來內(nèi)容的,需要在set方法中重新給相關(guān)內(nèi)容賦值才會展示出來矛物,最后倆個函數(shù)就是利用block將點擊事件傳遞到外部類中茫死。

  • 學(xué)習(xí)體會:在這里,學(xué)習(xí)的并不是作者怎么用UIView封裝AlterView,主要是履羞,學(xué)習(xí)用UIView學(xué)習(xí)封裝的一種思想璧榄。培養(yǎng)自己的思維能力。
    Demo地址以及原作者地址:
  • gitthb地址:
    https://github.com/RenZhengYang/ZYCustomAlterView/tree/master
  • 原作者地址:
    http://www.reibang.com/p/de2ecfd770c2
    基本上與作者匹配的大概吧雹,稍微改了一下骨杂,感謝原作者提供文章學(xué)習(xí)
最后編輯于
?著作權(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)容