代理页面传值
代理传值的整个过程。
代理传值主要是反向传,那么反向传我们从页面2将值传递到页面1 ,页面2 就是我们的委托方,委托方是持有协议并且调用协议方法,而且我们的协议也是定义在委托方的,首先来看一下协议怎么定义,
@protocol passValueDelegate <NSObject>
一个传值的这么一个代理
定义一个方法,这个方法有一个参数也就是我们要传递的值,那看你传什么值了,如果是字符串就定义一个字符串,如果是某一个类的对象那你就定义一个对象就行了,我们用字符串来演示一下.
//委托方-创建一个协议
@protocol passValueDelegate <NSObject>
//协议定义一个传值的方法
-(void)passValue:(NSString*)str;
@end
协议创建好了
那么委托方需要做的事情就是持有协议、然后呢再去调用协议方法传值就可以了
所以呢我们要持有协议的话我们需要一个weak id指针 一个id指针他是持有协议的,持有协议怎么来表现呢尖括号里面写上协议的名字就可以了,
这就是定义一个id指针,它呢持有了协议,指针的名字就叫delegate,指针的名字可以自己来取,代理呢为了防止循环引用一般使用weak来定义
持有协议之后接下来就是调用协议方法来进行传值
点击页面2button的时候我们来调用我们的方法
//代理传值--反向传值
这里呢使用我们的id指针 self.delegate调用我们协议的方法
passValue
传值传谁呢 就传我们textfile里面输入的值
[self.delegate passValue:self.textField.text];
这样就实现了代理的反向传值
那么页面2 通过协议将这个值传递之后,发出去之后 那页面1 怎么来接收呢
那就是我们的代理方了,代理方需要做两个事情就是遵守协议,实现协议方法。
遵守协议怎么来遵守呢
@interface ViewController ()<passValueDelegate>//遵守协议
并且实现协议方法
//代理传值--实现协议方法--接收来自页面2的值
-(void)passValue:(NSString *)str
接收来自页面2的值 :self.textField.text
我们并没有设置代理,两方如果通讯需要先把代理关系设置好才可以,
代理关系在哪设置,就是在我要通话的时候,第一个页面跳转至第二个页面的时候,需要先把代理关系设置好,设置好之后才可以进行通讯,才可以从第二个页面将值传回到第一个页面.将第二个页面他的代理设置为第一个页面(self)。
代理传值在iOS中是非常重要的传值方式也是用的最多的传值方式,相对来说要比前面三种麻烦一些。
代理传值需要有两个页面,分别是委托方和代理方
委托方和代理方要进行通讯的话,必须得先有一个协议,和生活里面也是一样的,中介 和 小名之间需要有一份协议,协议就规定了这两方之间如何进行通讯 ,也就是它做了一个约束,大家都遵守这个约束,就可以进行通讯了。
代理传值在iOS中的表现就是
委托方 呢持有协议并且调用协议方法
代理方呢遵守协议实现协议方法
我们如果想传值的 话,委托方持有协议调用协议方法进行传值
而代理方只要遵守了这个协议并且实现协议的方法 就可以接收委托方传过来的值,所以呢这就是我们的代理传值。他呢主要是围绕协议进行的,如果没有了协议没有了这个约束,那么两方是不能进行通讯的,所以这就是我们的代理传值。主要是应用于反向传值的。也就是说我们从页面1跳转到页面2 然后页面2反向给页面1进行传值,我们可以通过代理的方式来进行传递。
代理传值:主要应用于反向传值。其中,协议应该由委托方定义
步骤:委托方创建协议;委托方定义一个传值的方法;定义一个持有协议的id指针;.m文件中调用协议进行传值;遵守协议,并且实现协议方法;两者的财力关系‘