不是重复,我想在这里使用委托方法因为我想用委托将数据从视图控制器传输到另一个视图控制器



我想使用委托将数据从视图控制器传输到第二个视图控制器。我在做什么错误,为什么我的协议没有在第二个视图控制器上确认。代码:

"This Is my view Controller code"
ViewController.h
#import <UIKit/UIKit.h>
#import "SecondViewController.h"
@protocol ViewControllerProtocol <NSObject>
-(void)passData:(NSString*)data;
@end
@interface ViewController : UIViewController
@property id<ViewControllerProtocol>delegateVC;
@property (weak, nonatomic) IBOutlet UITextField *txtFieldVC;
- (IBAction)btnSendVC:(id)sender;
@end

ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)btnSendVC:(id)sender {
    [self.delegateVC passData:self.txtFieldVC.text];
    [self performSegueWithIdentifier:@"next" sender:self];
}
@end//
"This is my second view Controller code"
SecondViewController.h
#import <UIKit/UIKit.h>
#import "ViewController.h"
@interface SecondViewController : UIViewController<ViewControllerProtocol>
- (IBAction)btnSVC:(id)sender;
@property (weak, nonatomic) IBOutlet UITextField *txtFieldSVC;
@end
//  SecondViewController.m
#import "SecondViewController.h"
@interface SecondViewController ()
@end
@implementation SecondViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
-(void)passData:(NSString *)data {
    self.txtFieldSVC.text = [NSString stringWithFormat:@"%@",data];
    NSLog(@"Data Received: %@",data);
}
- (IBAction)btnSVC:(id)sender {
    [self.navigationController popViewControllerAnimated:YES];
}
@end

我错的地方是我错过了一些东西

如果我们使用上面的代码,它是不可能发送数据从第一个视图控制器到第二个视图控制器使用自定义委托。但如果我们想从第二个视图控制器发送数据到第一个视图控制器,这是可能的。如果你想把数据从下一个视图控制器发送到上一个视图控制器,你可以使用自定义委托和通知方法。

现在你的要求是你必须从第一个视图控制器发送数据到第二个视图控制器或下一个视图控制器。为此,你可以使用storyboard的prepareForSegue和performSegueWithIdentifier方法。

最新更新