您的位置:首页 > 移动开发 > IOS开发

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];

    }];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: