gpt4 book ai didi

ios - Storyboard将数据从第三个 VC 向后传递给第一个 VC

转载 作者:行者123 更新时间:2023-11-29 12:53:22 27 4
gpt4 key购买 nike

我的项目有这样的设计:

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

通过使用协议(protocol)/委托(delegate)方法,我可以毫无问题地将数据从 VC2 反向传递到 VC1,从 VC3 反向传递到 VC2。如果我想直接从VC3传数据给VC1,可以吗?或者我应该从 VC1 插入一个新的 segue 到 VC3 吗?

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

最佳答案

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

第一步:存储

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:使用委托(delegate)和协议(protocol)



在 VC3.h 中

@class VC3;

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

@interface


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

在 VC3 中,当我们弹出 View Controller 时,我们在委托(delegate)上调用消息。

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

这就是 VC3 的内容。现在在 VC1.h 中,告诉 VC1 导入 VC3 并遵守它的协议(protocol)。

#import "VC3.h"

@interface VC1 : UIViewController <VC3Delegate>

在 VC1.m 中实现我们协议(protocol)中的以下方法

- (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;
}

关于ios - Storyboard将数据从第三个 VC 向后传递给第一个 VC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21851437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com