BLOCK传值 协议传值

通过使用Block实现从后往前传值

写协议或添加属性

@protocol SecondViewControllerDelegate<NSObject>
-(void)changeColor;
@end
@interface SecondViewController : UIViewController
@property(nonatomic,retain)id<SecondViewControllerDelegate>delegate;
//写一条属性,负责接受第一页向第二页传递过来的block
//@property(nonatomic,copy)void(^block)();
//@property(nonatomic,copy)void(^block)(NSString *);
@property(nonatomic,copy)void(^block)(NSMutableArray *);
@end

这是一个按钮的点击方法,当触发点击事件时实现方法

-(void)click:(UIButton *)button{
    [self.navigationController popViewControllerAnimated:YES];
//    [self.delegate changeColor];
//    3.调用传过来的block
//    self.block(@"刘山山");
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
//    用block来传递数组    
    self.block(arr);   
}

实现单击事件的方法用来调用block

-(void)click:(UIButton *)button{
//  没有参数,没有返回值的block
//    通过block改变self.view的背景颜色
//    void (^block)() = ^(){
//        NSLog(@"测试");
        改变颜色
        self.view.backgroundColor = [UIColor colorWithRed:arc4random() % 266 / 255.0 green:arc4random() % 266 / 255.0 blue:arc4random() % 266 / 255.0 alpha:1];
//        
//    };
    调用
//    block();
//    通过block实现从后向前传值
//    block传值不需要返回值,因为调用更需要返回值,所以传值的时候只要参数,不需要返回值
//    void(^block)(NSString *) = ^(NSString *str){
//        NSLog(@"%@",str);
//    };
    void(^block)(NSMutableArray *) = ^(NSMutableArray *arr){  
//        传过来的数据都在block中处理
        for (NSInteger i = 0; i < arr.count; i++) {
            NSLog(@"%@",arr[i]);
        }
    };
    SecondViewController *secVC = [[SecondViewController alloc]init];
    secVC.block = block;
    [self.navigationController pushViewController:secVC animated:YES];
    [secVC release];
//    secVC.delegate = self;
//    2.把block通过属性传到第二页   
}

block传值练习

typedef void (^Block)(NSString *);
@interface SecondViewController : UIViewController
@property(nonatomic,copy)Block block;
@end

实现block传值的方法

@implementation SecondViewController
-(void)dealloc{
//这个是block自己的release方法
    Block_copy(_block);
    [super dealloc];
}
//点击事件,通过block方式传递字符串
-(void)click:(UIButton *)button{
    [self.navigationController popToRootViewControllerAnimated:YES];
    self.block(@"跳涧虎 陈达");
}

被传值页面的实现方法

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//    写一个参数是nsstring *的block
    void(^block)(NSString *) = ^(NSString *str){
        NSLog(@"%@",str);
        [self.arr addObject:str];
//        刷新tableView
        UITableView *tableview = (UITableView *)[self.view viewWithTag:1000];
        [tableview reloadData];
    };  
#pragma mark block作为属性的时候,为了防止block进入到栈区,栈区内存不需要我们进行管理,很可能出现block消失的情况,所以需要拷贝一份到堆区,这样能防止block在用的时候消失  
    SecondViewController *secVC = [[SecondViewController alloc]init];
    secVC.block= block;
    [self.navigationController pushViewController:secVC animated:YES];
    [secVC release];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 LayUI 中,你可以使用不同的方式来传递值。以下是几种常见的传值方式: 1. URL 传参:可以通过 URL 的参数来传递值。例如:`http://example.com?param1=value1&param2=value2`。在 LayUI 中,你可以使用 `location.search` 来获取 URL 中的参数,然后通过解析参数来获取对应的值。 2. 表单提交:如果你使用表单来提交数据,可以通过表单元素的 `name` 属性来获取对应的值。例如: ```html <form class="layui-form" action=""> <div class="layui-form-item"> <label class="layui-form-label">名称</label> <div class="layui-input-block"> <input type="text" name="name" lay-verify="required" placeholder="请输入名称" autocomplete="off" class="layui-input"> </div> </div> <!-- 其他表单项 --> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="formDemo">提交</button> </div> </div> </form> ``` 在 LayUI 中,你可以通过监听表单的提交事件,然后获取表单元素的值。 3. 全局变量:你可以在 JavaScript 中定义全局变量来传递值。例如: ```javascript // 在一个 JavaScript 文件中定义一个全局变量 var globalData = { value: 'Hello LayUI' }; // 在另一个 JavaScript 文件中获取全局变量的值 console.log(globalData.value); // 输出:Hello LayUI ``` 通过在不同的 JavaScript 文件中访问同一个全局变量,可以实现值的传递。 这些只是 LayUI 中传递值的几种常见方式,具体的使用方法可以根据你的需求进行选择和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值