IOS Block传值
2016-06-13 16:46
323 查看
1.使用协议在下级像上级传递值得时候比较繁琐,需要定义协议方法,定义属性,调用,在上级里设置代理实现代理方法。
2.使用block 在类前定义需要使用到的block,
#import <UIKit/UIKit.h>
/**
* 定义一个block
用来把自己传出去 给viewController
添加
*/
typedef void (^DialogViewBolock)(UIView *);
/**
* 定义一个无参数的block
主要为ok、按钮被点击的时候让调用者自己处理
*/
typedef void (^OKBtnBlock )(void);
@interface Dialog :
UIView{
}
/**
* 定义一个属性的block
是为了让按钮点击的时候触发这个block
在按钮点击事件里调用这个block
*/
@property (nonatomic,strong)OKBtnBlock okBtnBlock;
/**
* 对话框的封装
第一个block是为了把自己传过去
最后一个block是按钮点击的block
*/
-(void)addDialogViewTo:(DialogViewBolock)dialogView withTitle:(NSString *)title withContent:(NSString *)content btnText:(NSString
*)btnText okBtn:(OKBtnBlock) myOKBtnBlock;
@end
3.在实现方法里需要传递给上级的时候使用我们定义的block
-(void)addDialogViewTo:(DialogViewBolock)dialogView withTitle:(NSString *)title withContent:(NSString *)content btnText:(NSString
*)btnText okBtn:(OKBtnBlock)myOKBtnBlock{
UIButton *okBtn=[[[UIButton
alloc] initWithFrame:CGRectMake(0, centerViewHeight*2/3,
centerViewWidth, centerViewHeight/3)]
autorelease];
[okBtn setTitle:btnText
forState:UIControlStateNormal];
[okBtn addTarget:self
action:@selector(okBtn)
forControlEvents:UIControlEventTouchUpInside];
[okBtn setBackgroundColor:[UIColor
colorWithRed:0.94
green:0.94
blue:0.94
alpha:1.00]];
[okBtn setTitleColor:[UIColor
blackColor] forState:UIControlStateNormal];
[self addSubview:okBtn];
//把dialogView自己传过去
dialogView(self);
_okBtnBlock=Block_copy(myOKBtnBlock);
}
/**
* 当ok按钮被按的时候
调用这个方法 我们调用block
让上级调用的自己实现
*/
-(void)okBtn{
_okBtnBlock();
}
4.在需要调用这个方法的地方正常调用即可。
Dialog *dialog=[[Dialog
alloc] init];
[dialog addDialogViewTo:^(UIView * view){
view.tag=2001;
[self.view
addSubview:view];
} withTitle:@"对话框"
withContent:@"请注意"
btnText:@"确定"
okBtn:^{
NSLog(@"Dialog的对话框的去人按钮被处罚了 ");
UIView *view=[self.view
viewWithTag:2001];
[view removeFromSuperview];
}];
2.使用block 在类前定义需要使用到的block,
#import <UIKit/UIKit.h>
/**
* 定义一个block
用来把自己传出去 给viewController
添加
*/
typedef void (^DialogViewBolock)(UIView *);
/**
* 定义一个无参数的block
主要为ok、按钮被点击的时候让调用者自己处理
*/
typedef void (^OKBtnBlock )(void);
@interface Dialog :
UIView{
}
/**
* 定义一个属性的block
是为了让按钮点击的时候触发这个block
在按钮点击事件里调用这个block
*/
@property (nonatomic,strong)OKBtnBlock okBtnBlock;
/**
* 对话框的封装
第一个block是为了把自己传过去
最后一个block是按钮点击的block
*/
-(void)addDialogViewTo:(DialogViewBolock)dialogView withTitle:(NSString *)title withContent:(NSString *)content btnText:(NSString
*)btnText okBtn:(OKBtnBlock) myOKBtnBlock;
@end
3.在实现方法里需要传递给上级的时候使用我们定义的block
-(void)addDialogViewTo:(DialogViewBolock)dialogView withTitle:(NSString *)title withContent:(NSString *)content btnText:(NSString
*)btnText okBtn:(OKBtnBlock)myOKBtnBlock{
UIButton *okBtn=[[[UIButton
alloc] initWithFrame:CGRectMake(0, centerViewHeight*2/3,
centerViewWidth, centerViewHeight/3)]
autorelease];
[okBtn setTitle:btnText
forState:UIControlStateNormal];
[okBtn addTarget:self
action:@selector(okBtn)
forControlEvents:UIControlEventTouchUpInside];
[okBtn setBackgroundColor:[UIColor
colorWithRed:0.94
green:0.94
blue:0.94
alpha:1.00]];
[okBtn setTitleColor:[UIColor
blackColor] forState:UIControlStateNormal];
[self addSubview:okBtn];
//把dialogView自己传过去
dialogView(self);
_okBtnBlock=Block_copy(myOKBtnBlock);
}
/**
* 当ok按钮被按的时候
调用这个方法 我们调用block
让上级调用的自己实现
*/
-(void)okBtn{
_okBtnBlock();
}
4.在需要调用这个方法的地方正常调用即可。
Dialog *dialog=[[Dialog
alloc] init];
[dialog addDialogViewTo:^(UIView * view){
view.tag=2001;
[self.view
addSubview:view];
} withTitle:@"对话框"
withContent:@"请注意"
btnText:@"确定"
okBtn:^{
NSLog(@"Dialog的对话框的去人按钮被处罚了 ");
UIView *view=[self.view
viewWithTag:2001];
[view removeFromSuperview];
}];
相关文章推荐
- iOS8系统H264视频硬件编解码说明
- iOS 获得键盘的高度 NSNotificationCenter
- 百度推送(iOS)
- iOS定位获取当前所在经纬度,进而获得具体地址(省市地区街道)
- 【iOS开发】AFNetwork 2.0在请求时报错code=-1016 和 3840
- iOS 百度定位(获取经纬度)
- iOS推送角标与通知栏变化总结
- iOS纯代码手动适配(5,6,6P)
- iOS毛玻璃效果实现
- iOS 屏幕尺寸、逻辑分辨率、物理分辨率之间的相互关系
- ios 十六进制转换为十进制的
- iOS开发之drawRect初涉
- iOS 持续集成- Jenkins+iOS+fir+蒲公英 搭建持续集成环境
- IOS性能调优系列:Analyze静态分析
- IOS相机字体英文转中文
- iOS开发-Could not find a storyboard named 'Main' in bundle NSBundle
- iOS 怎样判断解屏和锁屏状态
- iOS 开发 车牌识别
- iOS中的中文乱码问题,关于NSString中文转化为wchar_t
- iOS类中的属性设置背景色(统一)