网络编程

当前位置:永利402游戏网站-永利402com官方网站 > 网络编程 > iOS-Study自定义视图view封装弹框AlterView

iOS-Study自定义视图view封装弹框AlterView

来源:http://www.xtcsyb.com 作者:永利402游戏网站-永利402com官方网站 时间:2019-09-16 12:04

大家在做开垦时平时会自定义一些view,况兼只要一旦该view比较复杂可能常常被调用到,大家就足以将该view单独放到一个类中,方便调用可能修改。笔者近期封装了八个自定义的弹出框,作用简单,借此跟我们沟通一下卷入自定义的视图view的方式与感受,仅仅是为了分享学习,并不建议直接在类型中运用,倘若有不当只怕不足之处,款待大家前来斟酌指正。

前言:咱俩开采的时候日常会自定义一些view,以备后用,明天从简书上看出一篇用view封装弹框的文章,就拿来读书学习。封装一下,以备学习,多谢那位作者。

先上效果图:

效果图:

图片 1058C982B-D7A0-4F82-875D-71559F13A562.png

图片 2自定义AlterView.gif

在ViewController.m中 导入"SZKAlterView.h"头文件调用代码:

目录:1.粗略的思绪2.代码演示3.施用方式4.读书要点5.思路总括6.读书体会7.德姆o地址以及原版的书文者地址

 SZKAlterView *lll=[SZKAlterView alterViewWithTitle:@"简书号:iOS_凯" content:@"感谢各位朋友的关注与鼓励" cancel:@"取消" sure:@"确定" cancelBtClcik:^{ //取消按钮点击事件 NSLog; } sureBtClcik:^{ //确定按钮点击事件 NSLog; }]; [self.view addSubview:lll];
  • 简言之的笔触:1.创办七个后续于UIView的类2.设置类所需的子控件3.在开立一个类措施,供于外界调去,属性传值,以及block回调。利用block将点击事件传递到表面类中。
  • 代码示例:

急需注意的是:SZKAlterView直接封装成了类方式,并且能够手动填入标题,内容,撤废按键的从头到尾的经过,分明开关的内容,还也有三个急需潜心的正是作者将裁撤开关和规定按键的点击事件选用block传递出去了,具体落到实处况势,上边讲到。

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

完结格局:SZKAlterView.h 中

 /**取消按钮点击事件*/ typedef void (^cancelBlock)(); /**确定按钮点击事件*/ typedef void (^sureBlock)();

 @interface ZYAlterView : UIView /**失败回调*/ @property(copy,nonatomic) cancelBlock cancel_block; /**成功回调*/ @property(copy,nonatomic) sureBlock sure_block;

 /** * * @param title 标题 * @param content 内容 * @param cancel 取消按钮内容 * @param sure 确定按钮内容 * @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
#import <UIKit/UIKit.h>//取消按钮点击事件typedef void(^cancelBlock)();//确定按钮点击事件typedef void(^sureBlock)();@interface SZKAlterView : UIView@property(nonatomic,copy)cancelBlock cancel_block;@property(nonatomic,copy)sureBlock sure_block;/** * 简书号:iOS_凯 http://www.jianshu.com/users/86b0ddc92021/latest_articles * * @param title 标题 * @param content 内容 * @param cancel 取消按钮内容 * @param sure 确定按钮内容 * @param cancelBlock 取消按钮点击事件 * @param sureBlock 确定按钮点击事件 * * @return SZKAlterView */+(instancetype)alterViewWithTitle:(NSString *)title content:(NSString *)content cancel:(NSString *)cancel sure:(NSString *)sure cancelBtClcik:(cancelBlock)cancelBlock sureBtClcik:(sureBlock)sureBlock;@end

解析:

SZKAlterView.m中

  • 先是,在.h文件,创造四个block的外号,用于把按键的点击事件传到外部,有爱不忍释的联系。
  • 附带,创设三个类措施-要把你打包的AlterView,所需的习性,从外边传进来,在通过block进行回调。也等于,从外围传进来的属性,需求大家从外围调用此措施,并设置AlterView的属性值。
-(instancetype)initWithFrame:frame{ self=[super initWithFrame:frame]; if  { //标题 _titleLb=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.bounds.size.width, 50)]; _titleLb.textAlignment=NSTextAlignmentCenter; _titleLb.textColor=[UIColor blackColor]; [self addSubview:_titleLb]; //内容 _contentLb=[[UILabel alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(_titleLb.frame), self.bounds.size.width, 50)]; _contentLb.textAlignment=NSTextAlignmentCenter; _contentLb.textColor=[UIColor redColor]; [self addSubview:_contentLb]; //取消按钮 _cancelBt=[[UIButton alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(_contentLb.frame), self.bounds.size.width/2, 50)]; _cancelBt.layer.borderColor=[UIColor grayColor].CGColor; _cancelBt.layer.borderWidth=0.5; [_cancelBt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_cancelBt addTarget:self action:@selector(cancelBtClick) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_cancelBt]; //确定按钮 _sureBt=[[UIButton alloc]initWithFrame:CGRectMake(self.bounds.size.width/2, CGRectGetMaxY(_contentLb.frame), self.bounds.size.width/2, 50)]; _sureBt.layer.borderColor=[UIColor grayColor].CGColor; _sureBt.layer.borderWidth=0.5; [_sureBt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_sureBt addTarget:self action:@selector(sureBtClick) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_sureBt]; } return self;}#pragma mark----实现类方法+(instancetype)alterViewWithTitle:(NSString *)title content:(NSString *)content cancel:(NSString *)cancel sure:(NSString *)sure cancelBtClcik:(cancelBlock)cancelBlock sureBtClcik:(sureBlock)sureBlock;{ SZKAlterView *alterView=[[SZKAlterView alloc]initWithFrame:CGRectMake(0, 0, 250, 150)]; alterView.backgroundColor=[UIColor whiteColor]; alterView.center=CGPointMake(WIDTH/2, HEIGHT/2); alterView.layer.cornerRadius=5; alterView.layer.masksToBounds=YES; alterView.title=title; alterView.content=content; alterView.cancel=cancel; alterView.sure=sure; alterView.cancel_block=cancelBlock; alterView.sure_block=sureBlock; return alterView;}#pragma mark--给属性重新赋值-setTitle:(NSString *)title{ _titleLb.text=title;}-setContent:(NSString *)content{ _contentLb.text=content;}-setSure:(NSString *)sure{ [_sureBt setTitle:sure forState:UIControlStateNormal];}-setCancel:(NSString *)cancel{ [_cancelBt setTitle:cancel forState:UIControlStateNormal];}#pragma mark----取消按钮点击事件-cancelBtClick{ [self removeFromSuperview]; self.cancel_block();}#pragma mark----确定按钮点击事件-sureBtClick{ [self removeFromSuperview]; self.sure_block();}

ZYAlterView.m#import "ZYAlterView.h"

急需小心的是:因为作者将该view封装成了类措施,所以会调用那么些类时会西施行+(instancetype)alterViewWithTitle:(NSString *)title...方式,紧接着实施-(instancetype)initWithFrame:frame办法,然后会继续实施alterView.title=title;品质赋值的章程,但是此时分界面显得不出来内容的,要求在set方法中重复给有关内容赋值才会显得出来,末了俩个函数便是选拔block将点击事件传递到表面类中。

 #define KSCREEN_W [UIScreen mainScreen].bounds.size.width #define KSCREEN_H [UIScreen mainScreen].bounds.size.height

 @interface ZYAlterView () /**标题lable*/ @property(strong,nonatomic)UILabel *titleLab; /**内容lable*/ @property(strong,nonatomic)UILabel *contentLab; /**取消Btn*/ @property(strong,nonatomic)UIButton *cancelBtn; /**确定Btn*/ @property(strong,nonatomic)UIButton *sureBtn;

 /**标题*/ @property(copy,nonatomic)NSString *title; /**内容*/ @property(copy,nonatomic)NSString *content; /**取消*/ @property(copy,nonatomic)NSString *cancelTitle; /**确定*/ @property(copy,nonatomic)NSString *sureTitle; @end

 @implementation ZYAlterView #pragma mark - 初始化 - (instancetype)initWithFrame:frame { self = [super initWithFrame:frame]; if  { > // 标题 _titleLab = [[UILabel alloc]initWithFrame:{0,0,self.bounds.size.width,50}]; _titleLab.textAlignment = NSTextAlignmentCenter; _titleLab.textColor = [UIColor blackColor]; [self addSubview:_titleLab]; > // 内容 _contentLab = [[UILabel alloc]initWithFrame:{0,CGRectGetMaxY(_titleLab.frame),self.bounds.size.width,50}]; _contentLab.textAlignment = NSTextAlignmentCenter; _contentLab.textColor = [UIColor redColor]; [self addSubview:_contentLab]; > // 取消按钮 _cancelBtn = [[UIButton alloc]initWithFrame:{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:{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----实现类方法 +(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:{0,0,250,150}]; alterView.backgroundColor = [UIColor whiteColor]; alterView.center = {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--给属性重新赋值 -setTitle:(NSString *)title { _titleLab.text = title; }

 -setContent:(NSString *)content { _contentLab.text = content; }

 -setSureTitle:(NSString *)sureTitle { [_sureBtn setTitle:sureTitle forState:UIControlStateNormal]; }

 - setCancelTitle:(NSString *)cancelTitle { [_cancelBtn setTitle:cancelTitle forState:UIControlStateNormal]; }

 #pragma mark----取消按钮点击事件 -cancelBtClick { [self removeFromSuperview]; self.cancel_block(); } #pragma mark----确定按钮点击事件 -sureBtClick { [self removeFromSuperview]; self.sure_block(); } @end

大致的落实形式写到这里,若是有不知道的能够联系作者,小编有问必答,假使想要下载完整demo请点击:SZKAlterView链接:

解析:通过init早先化控件,在通过自定义的类措施,创造自定义的类,对其质量举办赋值,不过,此时,控件未有值。其实,为其性质赋值,就是写其特性的set方法,通过set方法,给本类上的控件赋值。如上代码。

例如各位观者老爷还不曾看够,还应该有一篇有关Infiniti轮播图的封装iOS开垦-两句代码快Accord成无限轮播图(基于ScrollView封装)

  • 选拔方法:

小编的任何作品:iOS在线音乐广播SZKAVPlayer(基于AVPlayer的包裹)

在ViewController.m中 导入"#import "ZYAlterView.h""头文件调用代码:ZYAlterView *alterView = [ZYAlterView alterViewWithTitle:@"自定义弹框学习" content:@"虚心学习,真爱生命!" cancel:@"撤废" sure:@"分明" cancel_Block_Clcik:^{

iOS开荒-一句代码调用完结网络的监测功效(基于AFNetworkReachabilityManager的包裹)

 //取消按钮点击事件 NSLog; } sure_Block_Click:^{ //确定按钮点击事件 NSLog; }];

假设有欠缺或许失实的地点还望各位读者批评指正,能够商议留言,小编接到后第不时间回复。QQ/微信:790057066 。简书号:iOS_凯:

ZYAlterView直接封装成了类措施,并且能够手动填入标题,内容,撤销开关的内容,明确开关的内容,还也会有一个索要潜心的正是小编将吊销按键和规定开关的点击事件选择block传递出去了,这一点值得大家上学。

  • 学习要点:1.注销按钮和规定开关的点击事件选择block传递出去2.set措施传值3.自定义UIView思想的上学
  • 思路总括:

因为我将该view封装成了类格局,所以会调用这几个类时会先进行+(instancetype)alterViewWithTitle:(NSString *)title...方法,紧接着施行-(instancetype)initWithFrame:frame方法,然后会继续施行alterView.title=title;属性赋值的措施,不过此时界面显得不出去内容的,供给在set方法中再度给相关内容赋值才会体现出来,最后俩个函数正是运用block将点击事件传递到表面类中。

  • 学学体会:在此处,学习的并不是作者怎么用UIView封装AlterView,重若是,学习用UIView学习封装的一种思想。作育本身的思维技巧。德姆o地址以及原来的书文者地址:
  • gitthb地址:
  • 原著者地址:

本文由永利402游戏网站-永利402com官方网站发布于网络编程,转载请注明出处:iOS-Study自定义视图view封装弹框AlterView

关键词: