iOS视图控制器之间delegate传值

//
**
*为了从ViewControllerB往回传值到ViewControllerA,咱们须要使用协议(Protocols)和代理(Delegates)。为了实现这个**过程,咱们须要设置ViewControllerA为ViewControllerB的代理。这样能够使ViewControllerB可以发送消息到ViewContro*llerA,一样也能使咱们将数据回传。
*ViewControllerA做为ViewControllerB的代理必需要听从咱们在ViewControllerB中定义的协议(Protocols),这可以告诉*ViewControllerA有哪些方法是必需要实现的。
*/
1.//在ViewControllerB.h中,在#import和@interface 之间(就是代码位置),咱们像下面这样定义咱们的协议及协议方法
@class ViewControllerB;//  Important
@protocol  ViewControllerBDelegate <NSObject> - (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item; @end 
注://(NSString *)item是咱们如今要回传的数据类型,也能够是其余类型,如字典、数组等
2.  //仍然是在ViewControllerB.h中,设置一个delegate属性,同时在ViewController.m中synthesize
@property (nonatomic, weak) id <ViewControllerBDelegate>delegate;
     // 在工程中我是这么作的:@propertyid<SelectPeopleVCDelegate>delegate;
3.   //在ViewControllerB中,咱们在将要从导航控制器中弹出该视图的时候向代理发送消息(消息中含有咱们要传递的值)
NSString *itemToPassBack = @"Pass this value back to ViewControllerA";[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];
 在实际工程中我是这样完成的:
- (void)viewDidDisappear:(BOOL)animated
{
    [self.delegateaddItemViewController:selfdidFinishSelectPeople:dataSourceArray];
}
注:dataSourceArray是个人数据源,在一个公开变量,在前面的程序中完成赋值。
4.   //以上就是全部要在ViewControllerB中进行的操做,接下来就是ViewControllerA的操做。首先咱们要在ViewControllerA.h中导入ViewControllerB,并听从它的协议:
#import "ViewControllerB.h"
@interface ViewControllerA :UIViewController <ViewControllerBDelegate>
5.   //在ViewControllerA.m中实现协议方法:
- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString
 *)item{   
  NSLog(@"This was returned from ViewControllerB %@",item);
  }
6.   //最后,在咱们将ViewControllerB压入堆栈以前,咱们须要告诉ViewControllerB,ViewControllerA是它的代理(delegate):
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil];

viewControllerB.delegate = self[[self navigationController] pushViewController:viewControllerB animated:YES];
 在实际工程中我是这样作的:
- (void)prepareForSegue:(UIStoryboardSegue
 *)segue sender:(id)sender
{
   UIViewController * viewController = segue.destinationViewController;
   BAGSelectPeopleVC * selectPeopleVC = (BAGSelectPeopleVC *)viewController;
    
    selectPeopleVC.delegate =self;
}
相关文章
相关标签/搜索