// ** *爲了從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; }