block的两种使用场景

 1  保存代码

//tableViewController.h
#import "TableViewController.h"
#import "CellItem.h"
@interface TableViewController ()
@property (nonatomic, strong) NSArray *items;
@end
@implementation TableViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    //创建模型
    CellItem *item1 = [CellItem itemWithTitle:@"打电话"];
    item1.block = ^{
        NSLog(@"打电话");
    };
    CellItem *item2 = [CellItem itemWithTitle:@"发短信"];
    item2.block = ^{
        NSLog(@"发短信");
    };
    CellItem *item3 = [CellItem itemWithTitle:@"发邮件"];
    item3.block = ^{
        NSLog(@"发邮件");
    };
    _items = @[item1,item2,item3];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _items.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *ID = @"cell";   
    //从缓存池取出cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];  
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }  
    CellItem *item = self.items[indexPath.row];
    cell.textLabel.text = item.title;  
    return cell;
}
//点击cell就会调用
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //把要做的事情(代码)保存到模型
    CellItem *item = self.items[indexPath.row];
    if (item.block) {
        item.block();
    } 
}
@end
//CellItem.h
#import <Foundation/Foundation.h>
@interface CellItem : NSObject
//设计模型:控件需要展示什么内容,就定义什么属性
@property (nonatomic, strong) NSString *title;
//保存每个cell做的事情
@property (nonatomic, strong) void(^block)();
+ (instancetype)itemWithTitle:(NSString *)title;
@end
//CellItem.m
#import "CellItem.h"
@implementation CellItem
+ (instancetype)itemWithTitle:(NSString *)title
{
    CellItem *item = [[self alloc] init]; 
    item.title = title;  
    return item;
}
@end

 2  代理传值

//ViewController.m
#import "ViewController.h"
#import "ModalViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    ModalViewController *modalVC = [[ModalViewController alloc] init];
    modalVC.view.backgroundColor = [UIColor blueColor];
    modalVC.block = ^(NSString *value) {
        NSLog(@"%@", value);
    };
    //跳转
    [self presentViewController:modalVC animated:YES completion:nil];
}
@end
//ModalViewController.h
#import "ViewController.h"
@interface ModalViewController : ViewController
@property (nonatomic, strong) void(^block)(NSString *);
@end
//ModalViewController.m
#import "ModalViewController.h"
@interface ModalViewController ()
@end
@implementation ModalViewController
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    if(_block) {
        _block(@"123");
    }
}
@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值