【深入浅出ios开发】使用代理进行传值

一般在ios开发中通过segue过度进行传值,有些时候可能不行,例如两个UIviewcontroller之间相互传值。这时候我们一般通过代理来进行传值。

由于自己是C++出身,对设计模式也有所了解,这里就简单的用个实例来讲解代理模式如何通过代理进行传值。

某公司接到一个项目,于是项目经理开始写计划,然后进行软件的基本架构。这时候他发现自己一个人无法在预定的时间里完成这个软件。于是他就开始招人,招了一个程序员来写一些方法。

①项目经理让程序员做某些事情,肯定要他遵守某些准则,也就是所谓的协议。

项目经理于是定好协议,在协议中把方法封装好。

@protocol MRViewControllerThreeDelegate <NSObject>
-(void)addPerson: (MRViewControllerThree*)addVc withPersonName:(NSString*)strName withPersonTel:(NSString*)strTel;
@end
1.这里@protocol.....@end代表签署一份协议.

2.MRViewControllerThree表示协议的签署人这里就是项目经理,也就是代理者。MRViewControllerThreeDelegate表示项目经理负责代理。

3.<NSObject>表示签署的协议还必须遵守的其他协议。这就像公司给我们签合同一样,首先要遵循劳动法等约束。

4.addPerson方法,也就是我们协议的内容,也就是协议代理者(MRViewControllerThree)要求被代理者

(MRTableViewControllerTwo)干的事情。


②程序员也就是被代理者(MRTableViewControllerTwo)要遵循协议才能做相关的事情。

首先他要得到项目经理的代理:

#import "MRViewControllerThree.h"
@interface MRTableViewControllerTwo ()<MRViewControllerThreeDelegate>

<MRViewControllerThreeDelegate>就是程序员要引用干的项目经理的代理。

然后,他要告诉项目经理我愿意按照你的代理办事:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    MRViewControllerThree *controllerThree = segue.destinationViewController;
    controllerThree.delegate = self;
}

最后,实现代理中的方法:

-(void)addPerson:(MRViewControllerThree *)addVc withPersonName:(NSString *)strName withPersonTel:(NSString *)strTel
{
    NSLog(@"----%@-------%@-----%@------",strName,strTel,self);
}

这里就是简单的输出代理者要求我们输出的字符串,还有自己的的身份(self)。


③项目经理拿回代理进行确认,然后让调用程序员做事。

@interface MRViewControllerThree : UIViewController
@property(strong,nonatomic) id<MRViewControllerThreeDelegate> delegate;
@end

- (IBAction)backToTwo:(id)sender {
    //1.返回上一个控制器
    [self.navigationController popViewControllerAnimated:YES];
    //2.通知代理,传递数据给上一个控制器
    if ([self.delegate respondsToSelector:@selector(addPerson:withPersonName:withPersonTel:)]) {
        NSString *strName = self.textFieldName.text;
        NSString *strTel = self.textFieldTel.text;
        [self.delegate addPerson:self withPersonName:strName withPersonTel:strTel];
    }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值