故事板将数据从第三个VC传递回第一个VC

时间:2014-02-18 10:48:39

标签: ios objective-c storyboard segue

我的项目有这样的设计:

VC1 --- firstSegue ----> VC2 --- secondSegue ---> VC3

使用protocol / delegate方法将数据从VC2反向传递到VC1和VC3到VC2没有问题。如果我想直接将数据从VC3传递给VC1,是否可能? 或者我应该从VC1到VC3插入一个新的segue?

===================================更新=========== ============================ 我的情况是当VC3执行“-viewDidLoad”时,我想让VC1执行一些操作。完成操作后,VC3将继续工作。

1 个答案:

答案 0 :(得分:1)

选项1:使用NSUserDefaults存储和检索数据

第1步:用于存储

NSUserDefaults in VC3 view controller

[[NSUserDefaults standardUserDefaults] setObject:@"hello" forKey:@"mydata"]; 

第2步:用于检索

NSUserDefaults in VC1 or any other controller:

NSString* receivedData = [[NSUserDefaults standardUserDefaults] objectForKey:@"mydata"];



选项2:使用委托和协议



在VC3.h中

@class VC3;

@protocol VC3Delegate <NSObject>
- (void)addItemViewController:(VC3 *)controller didFinishEnteringItem:(NSString *)item;
@end

@interface


@property (nonatomic, weak) id <VC3Delegate> delegate;

在VC3中,当我们弹出视图控制器时,我们会在代理上调用一条消息。

NSString *itemToPassBack = @"Pass this value back to VC1";
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];

这就是VC3。现在在VC1.h中,告诉VC1导入VC3并遵守其协议。

#import "VC3.h"

@interface VC1 : UIViewController <VC3Delegate>

在VC1.m中,从我们的协议实施以下方法

- (void)addItemViewController:(VC3 *)controller didFinishEnteringItem:(NSString *)item
{
    NSLog(@"This was returned from VC3 %@",item);
}

我们需要做的最后一件事就是在我们将VC3推送到导航堆栈之前告诉VC3 VC1是它的委托。

NSMutableArray *arrayOfControllers = [[NSMutableArray alloc] initWithObjects:self.navigationController.viewControllers, nil];

  for (UIViewController *vc in arrayOfControllers) {
    if ([vc isKindOfClass:[VC3 class]]) {
        //It exists
           vc.delegate = self;
    }