iOS 页面传值的几种方式之代理传值

场景: 假设我们有两个控制,控制器A和控制器B,当我们A ——>B,无论我们使用modal方式还是push 还是segue,我们都可以直接给B控制一个成员属性。只需要重写这个属性的set方法,就能够实现A的值传向B中去,如果需要根据这个值来改变B控制器的样式,我们在setter方法中重写即可。

那么问题来了,学挖掘机哪家强,中国山东找LX!!

言归正传,如果当我们B控制器回到A控制器,无论是Push还是Modal方式,这个值又该怎么传呢?

假想场景: A中有一个 Label  ,B中有一个TextField ,当B控制器pop或者dismiss的时候,回到A,将B中TextField的值赋值给A控制器中的Label

 

1.最常见的可能就是代理传值方式

   1.1给B控制器设置代理

    @optional

      -(void)passString:(NSString*)str;//B控制器的传值代理

      

  B控制器消失 pop 或者dismiss操作之前

  添加代码:

    if([self.delegate reponseToSelector:@selector(passString:)]){//如果代理实现了这个方法

      //通知代理实现这个方法

      [self.delegate passString:self.textFeild.text];
  }

  

 ZPViewControllerA.h

#import <UIKit/UIKit.h>

@interface ZPViewControllerA : UIViewController

@end

 ZPViewControllerA.m

//当需要Push操作或者present操作时

ZPViewControllerB *VcB=[[ZPViewControllerB alloc] init];

VcB.delegate=self;

//实现B控制器的代理方法

-(void)passString:(NSString*)str{

    self.textLabel.text=str;//将B控制器丢过来的值赋值给A中Label

}

posted @ 2014-11-27 16:09  Shdow_Walker  阅读(670)  评论(1编辑  收藏  举报