Ios 将数据从委托视图发送到委托视图[Objective-C]
因此,我试图学习如何将数据从一个视图控制器发送到另一个视图控制器 到目前为止,我的代码获取从一个VC(Ios 将数据从委托视图发送到委托视图[Objective-C],ios,objective-c,iphone,uiviewcontroller,delegates,Ios,Objective C,Iphone,Uiviewcontroller,Delegates,因此,我试图学习如何将数据从一个视图控制器发送到另一个视图控制器 到目前为止,我的代码获取从一个VC(DelegateVC)输入的数据,并将其显示在另一个VC(ViewController)上的标签中 这里的委托是ViewController,委托是DelegateVC =========================================================================== 主要问题 但是如果我想将标签数据从ViewController传递到Dele
DelegateVC
)输入的数据,并将其显示在另一个VC(ViewController
)上的标签中
这里的委托是ViewController
,委托是DelegateVC
===========================================================================
主要问题
但是如果我想将标签数据从ViewController
传递到DelegateVC
,该怎么办?我怎样才能做到这一点?我尝试设计相同的委托概念,但使用DelegateVC
作为ViewController
的委托。不确定这是否是写方法
TL;博士:
在VC
中,如果我点击Next View
,我将进入DelegateVC
并输入“test”,它将在VC的接收标签中显示为“test”
现在,下次点击next View
,我希望现有标签的值显示在DelegateVC
的TextField
中。不是空白的文本字段
,而是值“test”
===========================================================================
假设我有一个Main.storyboard
像这样:
我有一个ViewController.h
文件:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
DelegateVC.h:
#import <UIKit/UIKit.h>
@protocol MainVCDelegate;
@interface DelegatedVC : UIViewController
@property (strong, nonatomic) IBOutlet UITextField *sendDataTF;
- (IBAction)sendData:(id)sender;
@property (weak, nonatomic) id<MainVCDelegate> delegate;
@end
@protocol MainVCDelegate <NSObject>
-(void) sendBackData: (DelegatedVC *) delegatedVC : (NSString *) textField;
@end
#import "DelegatedVC.h"
@protocol MainVCDelegate;
@interface DelegatedVC ()
@end
@implementation DelegatedVC
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
- (IBAction)sendData:(id)sender {
[self.delegate sendBackData: self : _sendDataTF.text];
}
@end
但是如果我想从ViewController传递标签的数据呢
授权VC?我怎样才能做到这一点
因此,正如我在代码中看到的那样,您的委托是正确的。回到您的主要问题,您只需要在DelegateVC.h
中声明一个公共NSString
对象,然后访问该对象并将数据从ViewController
的prepareforsgue
传递到该对象
下一步,在DelegateVC.m
中,获取NSString
对象的值并将其传递给UITextField
如果有帮助,请告诉我:)
但是如果我想从ViewController传递标签的数据呢
授权VC?我怎样才能做到这一点
因此,正如我在代码中看到的那样,您的委托是正确的。回到您的主要问题,您只需要在DelegateVC.h
中声明一个公共NSString
对象,然后访问该对象并将数据从ViewController
的prepareforsgue
传递到该对象
下一步,在DelegateVC.m
中,获取NSString
对象的值并将其传递给UITextField
让我知道这是否有帮助:)代理允许一个对象在事件发生时向另一个对象发送消息
如果要将标签数据从ViewController
传递到DelegateVC
,则不需要使用delegate。但是,由于在sendDataTF
textfield上发生更改时,您希望更新receivingLabel
,因此在这种情况下,您需要一个代理,我认为您已经做得很好了
解决方案:您需要在DelegateVC
中声明一个属性来存储从ViewController
传递的字符串,并在viewDidLoad
上的sendDataTF
中设置该文本
在DelegateVC.h中声明属性:
#import "ViewController.h"
#import "DelegatedVC.h"
@interface ViewController () <MainVCDelegate>
@property (strong, nonatomic) IBOutlet UILabel *receivingLabel;
- (IBAction)nextView:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)nextView:(id)sender {
}
-(void) sendBackData:(DelegatedVC *)delegatedVC :(NSString *)textField {
[delegatedVC dismissViewControllerAnimated:YES completion:nil];
self.receivingLabel.text = textField;
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
DelegatedVC *secondVC = segue.destinationViewController;
secondVC.delegate = self;
}
@end
@interface DelegatedVC : UIViewController
@property (weak, nonatomic) id<MainVCDelegate> delegate;
@property (strong, nonatomic) NSString *labelString;
@property (strong, nonatomic) IBOutlet UITextField *sendDataTF;
- (IBAction)sendData:(id)sender;
@end
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DelegatedVC *secondVC = segue.destinationViewController;
secondVC.delegate = self;
secondVC.labelString = self.receivingLabel.text;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.sendDataTF.text = self.labelString;
}
在DelegateVC.m:
#import "ViewController.h"
#import "DelegatedVC.h"
@interface ViewController () <MainVCDelegate>
@property (strong, nonatomic) IBOutlet UILabel *receivingLabel;
- (IBAction)nextView:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)nextView:(id)sender {
}
-(void) sendBackData:(DelegatedVC *)delegatedVC :(NSString *)textField {
[delegatedVC dismissViewControllerAnimated:YES completion:nil];
self.receivingLabel.text = textField;
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
DelegatedVC *secondVC = segue.destinationViewController;
secondVC.delegate = self;
}
@end
@interface DelegatedVC : UIViewController
@property (weak, nonatomic) id<MainVCDelegate> delegate;
@property (strong, nonatomic) NSString *labelString;
@property (strong, nonatomic) IBOutlet UITextField *sendDataTF;
- (IBAction)sendData:(id)sender;
@end
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DelegatedVC *secondVC = segue.destinationViewController;
secondVC.delegate = self;
secondVC.labelString = self.receivingLabel.text;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.sendDataTF.text = self.labelString;
}
希望它能工作。委托允许一个对象在事件发生时向另一个对象发送消息
如果要将标签数据从ViewController
传递到DelegateVC
,则不需要使用delegate。但是,由于在sendDataTF
textfield上发生更改时,您希望更新receivingLabel
,因此在这种情况下,您需要一个代理,我认为您已经做得很好了
解决方案:您需要在DelegateVC
中声明一个属性来存储从ViewController
传递的字符串,并在viewDidLoad
上的sendDataTF
中设置该文本
在DelegateVC.h中声明属性:
#import "ViewController.h"
#import "DelegatedVC.h"
@interface ViewController () <MainVCDelegate>
@property (strong, nonatomic) IBOutlet UILabel *receivingLabel;
- (IBAction)nextView:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)nextView:(id)sender {
}
-(void) sendBackData:(DelegatedVC *)delegatedVC :(NSString *)textField {
[delegatedVC dismissViewControllerAnimated:YES completion:nil];
self.receivingLabel.text = textField;
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
DelegatedVC *secondVC = segue.destinationViewController;
secondVC.delegate = self;
}
@end
@interface DelegatedVC : UIViewController
@property (weak, nonatomic) id<MainVCDelegate> delegate;
@property (strong, nonatomic) NSString *labelString;
@property (strong, nonatomic) IBOutlet UITextField *sendDataTF;
- (IBAction)sendData:(id)sender;
@end
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DelegatedVC *secondVC = segue.destinationViewController;
secondVC.delegate = self;
secondVC.labelString = self.receivingLabel.text;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.sendDataTF.text = self.labelString;
}
在DelegateVC.m:
#import "ViewController.h"
#import "DelegatedVC.h"
@interface ViewController () <MainVCDelegate>
@property (strong, nonatomic) IBOutlet UILabel *receivingLabel;
- (IBAction)nextView:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)nextView:(id)sender {
}
-(void) sendBackData:(DelegatedVC *)delegatedVC :(NSString *)textField {
[delegatedVC dismissViewControllerAnimated:YES completion:nil];
self.receivingLabel.text = textField;
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
DelegatedVC *secondVC = segue.destinationViewController;
secondVC.delegate = self;
}
@end
@interface DelegatedVC : UIViewController
@property (weak, nonatomic) id<MainVCDelegate> delegate;
@property (strong, nonatomic) NSString *labelString;
@property (strong, nonatomic) IBOutlet UITextField *sendDataTF;
- (IBAction)sendData:(id)sender;
@end
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DelegatedVC *secondVC = segue.destinationViewController;
secondVC.delegate = self;
secondVC.labelString = self.receivingLabel.text;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.sendDataTF.text = self.labelString;
}
希望它能工作。以下是正确的工作代码,您可以查看:
带有标签和按钮的DelegateVc.h文件
#import <UIKit/UIKit.h>
#import "DelegatedVC.h"
@interface DelegateVC : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *ReceiveLabel;
@property (weak, nonatomic) IBOutlet UIButton *NextView;
@property (strong, nonatomic) NSString *TextFeildText;
带文本字段的DelagatedVc.h
#import <UIKit/UIKit.h>
#import "DelegateVC.h"
@interface DelegatedVC : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *RCTextField;
@property (weak, nonatomic) IBOutlet UIButton *SenddataBtn;
@property (strong, nonatomic) NSString *LabelText;
@end
我的故事板前景
以下是您可以查看的正确工作代码:
带有标签和按钮的DelegateVc.h文件
#import <UIKit/UIKit.h>
#import "DelegatedVC.h"
@interface DelegateVC : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *ReceiveLabel;
@property (weak, nonatomic) IBOutlet UIButton *NextView;
@property (strong, nonatomic) NSString *TextFeildText;
带文本字段的DelagatedVc.h
#import <UIKit/UIKit.h>
#import "DelegateVC.h"
@interface DelegatedVC : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *RCTextField;
@property (weak, nonatomic) IBOutlet UIButton *SenddataBtn;
@property (strong, nonatomic) NSString *LabelText;
@end
我的故事板前景
与其使用一个序列返回到原始视图控制器,不如使用一个展开序列,这样您的视图就不会彼此重叠。与其使用分段返回到原始视图控制器,不如使用展开分段,这样您的视图就不会彼此重叠。我试过了,但没用。我所做的是在DelegateVC.h
声明的静态NSString*globalStr
中。在ViewController
的prepareforsgue
中,我添加了globalStr=\u receivingLabel.text
。最后,在DelegateVC.m的viewdiload中,我添加了sendDataTF.text=globalStr
。思想?谢谢这就是我在上面的回答中告诉你的:)我试过了,但没有成功。我所做的是在DelegateVC.h
声明的静态NSString*globalStr
中。在ViewController
的prepareforsgue
中,我添加了globalStr=\u receivingLabel.text
。最后,在DelegateVC.m的viewdiload中,我添加了sendDataTF.text=globalStr。思想?谢谢这就是我在上面的回答中告诉你的:)