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;
}
相關文章
相關標籤/搜索