gpt4 book ai didi

ios - 了解将数据从第二个 View Controller 传回主视图 Controller 时的机制

转载 作者:行者123 更新时间:2023-12-01 18:16:28 25 4
gpt4 key购买 nike

我目前正在尝试更好地理解 Controller 之间传递数据的机制是如何工作的,我有点困惑,尤其是在 时。将数据从第二个 View Controller 传回主视图 Controller .

这就是我所拥有的,但并不完全理解。我有两个 View Controller ,在第一个中,我有一个按钮,当单击它时,它基本上会转到第二个 View Controller 和一个显示从第二个 View Controller 发送的消息的标签。在第二个 View Controller 中,我有一个按钮和一个文本字段,该按钮基本上将文本字段中的任何内容发送到主视图 Controller 中的标签。

这是代码...

//FirstVC.h

#import <UIKit/UIKit.h>
#import "SecondVC.h"
@interface FirstVC : UIViewController <passNames>

@property (nonatomic, strong) NSString* firstNameString;
@property (weak, nonatomic) IBOutlet UILabel *firstNameLabel;

@end

//FirstVC.m
#import "FirstVC.h"

@implementation FirstVC

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier]isEqualToString:@"secondController"])
{
UINavigationController *navController = segue.destinationViewController;
SecondVC *vc2 = (SecondVC*)navController.topViewController;
[vc2 setDelegate:self];
}
}
-(void)viewWillAppear:(BOOL)animated
{
self.firstNameLabel.text = _firstNameString;
}

-(void)setFirstName:(NSString *)firstName
{
_firstNameString = firstName;
}
@end

//第二个VC.h
#import <UIKit/UIKit.h>

@protocol passNames <NSObject>
-(void)setFirstName:(NSString*)firstName;
@end

@interface SecondVC : UIViewController

@property (retain)id <passNames> delegate;

- (IBAction)send:(UIBarButtonItem *)sender;

@property (nonatomic, strong) NSString *firstNameString;
@property (weak, nonatomic) IBOutlet UITextField *firstNameText;
@end

//第二个VC.m
#import "SecondVC.h"
#import "FirstVC.h"

@interface SecondVC ()

@end

@implementation SecondVC

- (IBAction)send:(UIBarButtonItem *)sender
{
_firstNameString = _firstNameText.text;
[[self delegate]setFirstName:_firstNameString];
[self dismissViewControllerAnimated:YES completion:nil];
}
@end

有人可以解释一下 prepareForSegue 方法在上面的代码中是如何工作的吗?这个问题的原因是因为我添加了一个 NSLog 并且看起来这个方法只在从主视图 Controller 到第二个 Controller 的转换中被调用。如果在从第二个 View Controller 转换到主视图 Controller 时不调用此方法,为什么需要此方法,在我的情况下,这就是我正在做的事情?在将数据从主视图 Controller 传递到第二个 Controller 时使用它是有意义的,而不是在上面显示的情况下。

将数据传回主视图 Controller 时,有人可以解释整个机制吗?

仅供引用,我确实了解协议(protocol)和授权。

非常感谢。

最佳答案

在您的情况下,您在prepareForSegue 中将第二个 View Controller 的委托(delegate)方法设置为mainViewController 中的self。这意味着除了导航到 SecondViewController 之外,您还在主视图 Controller 中实现回调机制,以便在从第二个 View Controller 传递值时调用您的委托(delegate)方法,并且此委托(delegate)方法将值作为参数收集到在主视图 Controller 中处理它。您可能已将 VC2 的委托(delegate)设置为您的 prepareForSegue,因为您正在此方法中创建 VC2 的实例以导航到第二个 Controller 。

关于ios - 了解将数据从第二个 View Controller 传回主视图 Controller 时的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506809/

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