iOS block 反向传值
自定义view传出点击方法,传值
第一步:
@interface FLGHomeView : UIView
@property (nonatomic,copy)void (^noticeBlock)(NSString *noticeId);
@end
第二步:
(void)buttonAction:(UIButton*)button{
self.noticeBlock(@”123456”);
}
第三步:
FLGHomeView *home = [[FLGHomeView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
home.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:home];
home.noticeBlock = ^(NSString * _Nonnull noticeId) {
NSLog(@"-----------%@",noticeId);
};
一.block的四种形式
1.无参数,无返回值
void(^block)()=^(){
NSLog(@“今天正热”);
};
block();
——->今天正热
2.有参数,无返回值
void(^block)(int, int)=^(int a, int b){
int max=a>b?a:b;
NSLog(@“%d”,max);
};
block(10,20);
———>20
void(^block)(NSString *)=^(NSString *str){
NSLog(@“%@”,str);
};
block(@“nihao”);
———->nihao
3.有返回值,无参数
int (^block)()=^(){
return (int)100;
};
NSLog(@“%d”,block());
4.有参数,有返回值
NSString *(^block)(NSArray *,NSInteger)=^(NSArray *arr,NSIteger index){
return arr[index];
};
block(@[@“1”,@“2”,@“3”,@“4”],1);
———->2
block传值
1.block 页面之间反向传值(数组可以改为其他的类型,字符串,字典等)(2页面传到1页面)
@ 页面1的跳转方法中:
void(^block)(NSArray *)=^(NSArray *arr){
NSLog(@"%@",arr);
};<可以放在任何位置的>
- (void)click:(UIButton *)button{
secondViewController *secondVC=[[secondViewController alloc] init];
[self.navigationController pushViewController:secondVC animated:YES];
secondVC.block=block;
}
@页面2.h中声明属性
@property(nonatomic,copy)void(^block)(NSArray *);
@页面2返回方法中
-(void)click:(UIButton *)button{
[self.navigationController popViewControllerAnimated:YES];
self.block(@[@"1",@"2",@"3"]);
}
2.也可以不进行传值 第二个页面返回时需要在第一个页面进行一些操作的时候可以使用block
@ 页面1的跳转方法中:
void(^block)()=^(){
// 从第二个页面回来需要进行的操作
};
- (void)click:(UIButton *)button{
secondViewController *secondVC=[[secondViewController alloc] init];
[self.navigationController pushViewController:secondVC animated:YES];
secondVC.block=block;
}
@页面2.h中声明属性
@property(nonatomic,copy)void(^block)();
@页面2返回方法中
-(void)click:(UIButton *)button{
[self.navigationController popViewControllerAnimated:YES];
self.block();
}
headView按钮的点击跳页面方法
// 定义block
typedef void(^HomeTableBlock)(NSInteger index);
@property (nonatomic, copy) HomeTableBlock btnBlock;
// button的点击方法
(void)buttonAction:(UIButton *)btn {
if (self.btnBlock) {
self.btnBlock(btn.tag - 50000);
}
}
// 创建头视图
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
headView.btnBlock = ^(NSInteger index) {
switch (index) {
case 1:
{ break};
case 2:
{ break}
}
}
按钮点击操作 实时返回信息(视频下载进度)
controller的按钮
- (void)taoAction{
/// 只执行一次 block 多次返回信息
views *view = [[views alloc] init];
[view tap:^(NSInteger a) {
NSLog(@"-------------%ld",a);
}];
}
views.h
@property (nonatomic, copy) void(^sblock)(NSInteger a);
- (void)tap:(void(^)(NSInteger a))blocksuccess;
views.m
(void)tap:(void(^)(NSInteger a))blocksuccess{
self.sblock = blocksuccess;
}
(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if(self){
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(tapaction) userInfo:nil repeats:YES];
}
return self;
}
(void)tapaction{
self.sblock(100);
}
自定义view传出点击方法,传值
第一步:
@interface FLGHomeView : UIView
@property (nonatomic,copy)void (^noticeBlock)(NSString *noticeId);
@end
第二步:
(void)buttonAction:(UIButton*)button{
self.noticeBlock(@”123456”);
}
第三步:
FLGHomeView *home = [[FLGHomeView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
home.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:home];
home.noticeBlock = ^(NSString * _Nonnull noticeId) {
NSLog(@"-----------%@",noticeId);
};
本作品采用《CC 协议》,转载必须注明作者和本文链接