页面跳转与数据传递

将数据从 ViewControllerA 传递到 ViewControllerB 

1、建立数据传递协议

// 数据传递协议
@protocol PassValueDelegate <NSObject>
-(void)setData:(NSMutableDictionary *)dictionary;
@end


2、ViewControllerA 中的代码

首先,声明委托,记录 ViewControllerB

// 数据传递的目标视图

@property(nonatomic,assign)NSObject<PassValueDelegate> *delegate;

其次,在页面跳转的命令中使用Segue进行页面跳转

[self performSegueWithIdentifier:@"RegionID" sender:nil];

最后,重载下面的接口,在页面跳转之前准备需要传递的数据 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"DoSomething"]){
        self.delegate = segue.destinationViewController;
    
        // 更新UI到数据,获取数据字典
        [self updateDataFromUI];
        NSMutableDictionary *dictionary = [self.currentRegionData transfromToDictionary];

        // 调用代理,传递数据
        [self.delegate setData:dictionary];
    }
}


下面的方法可以决定是否允许Segue跳转

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender{
    if ([identifier isEqualToString:@"mySegueID"]) {
        return [self canSegue] ? YES : NO;
    }
}



3、ViewControllerB 中的代码

为控制器 ViewControllerB 添加 <PassValueDelegate协议,实现该协议

-(void)setData:(NSMutableDictionary *)dictionary
{
    RegionData *data = [[RegionData alloc] init];
    [data FillWithDictionary:dictionary];
}


4、封装需要传递的数据

声明自定义数据到字典的转换

// 转换数据到字典
@protocol TransfromToDictionary <NSObject>
-(NSMutableDictionary *)transfromToDictionary;
-(void)FillWithDictionary:(NSMutableDictionary *) dictionary;
@end


在自定义数据结构中实现该协议

-(NSMutableDictionary *)transfromToDictionary{
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity: 1];
    [dictionary setValue:self forKey:@"regionData"];
    return dictionary;
}

-(void)FillWithDictionary:(NSMutableDictionary *) dictionary{
    RegionData *data = [dictionary objectForKey:@"regionData"];
    self.regionName = data.regionName;
    self.regionDetail = data.regionDetail;
    self.regionImage = data.regionImage;
    self.location = data.location;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值