在IOS中,有些情况是用代理实现反向传值的,现在介绍一种更为简单的传值方式,是Block传值方式,Block在IOS中代码有点生涩,理解起来有点困难,但是写法确实比代理方式方便太多。
下面贴上相关代码,为以后学习作为标记:
第一个页面相关代码:
//点中右上角按键
-(void)addCity:(UIBarButtonItem*)sender {
//跳转到添加界面
AddViewController *addVc = [[AddViewController alloc]init];
//设置block属性
//block 本身就是函数 只是是 匿名函数
addVc.block = ^(City *city) {
//将 新城市添加到数组中
[self.allcities addObject:city];
//刷新 tableview
[self.tableView reloadData];
};
[self.navigationController pushViewController:addVc animated:YES];
}
第二个页面(传值的页面)相关代码:
AddViewController.h
#import <UIKit/UIKit.h>
#import "City.h"
//1.给Block类型起个别名
typedef void(^ADD_BLOCK)(City*);
@interface AddViewController : UIViewController
//2.添加Block属性 //MRC用copy ARC用strong
@property(nonatomic,strong)ADD_BLOCK block;
@end
AddViewController.m页面:
- (IBAction)addCity:(id)sender {
City *city = [[City alloc]init];
city.name = self.nameField.text;
city.population = [self.populationField.text intValue];
//3.适当的时候通过 block 把值传出去
self.block(city);
//把新的城市 传给代理人(前一个界面)
// [self.delegate addCity:self inputCity:city];
//委托 是传过来 一个代理对象,通过代理对象执行代理方法
//Block 是传过来一个 一个执行方法
//返回前一个界面
[self.navigationController popViewControllerAnimated:YES];
}