目标c – 使用委托传回string值

我想通过委托在ViewController中将UITextField * nameText从GreenViewController传递给UILabel * nameValue。

我做了委托,在ViewController中的onSave方法被调用,但屏幕不回去,名称不传递。 问题是什么? 这是标题和impelentation文件:

GreenViewController.h

#import <UIKit/UIKit.h> @protocol GreenViewDelegate <NSObject> -(void)onSave:(NSString*)nameValue; @end @interface GreenViewController : UIViewController @property id<GreenViewDelegate> delegate; @property (nonatomic) NSString* sliderValuePassed; @property (weak, nonatomic) IBOutlet UIButton *Next; @property (weak, nonatomic) IBOutlet UIButton *Save; @property (weak, nonatomic) IBOutlet UIButton *Back; @property (weak, nonatomic) IBOutlet UILabel *sliderTextValue; @property (weak, nonatomic) IBOutlet UITextField *NameText; - (IBAction)save:(id)sender; @end 

GreenViewController.m

 #import "GreenViewController.h" #import "ViewController.h" @interface GreenViewController () @end @implementation GreenViewController - (void)viewDidLoad { [super viewDidLoad]; self.sliderTextValue.text = self.sliderValuePassed; } - (IBAction)back:(id)sender { [self dismissViewControllerAnimated:YES completion:nil]; } - (IBAction)save:(id)sender { [self.delegate onSave:self.NameText.text]; [self.navigationController popViewControllerAnimated:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 

ViewController.h

 #import <UIKit/UIKit.h> #import "GreenViewController.h" @interface ViewController : UIViewController <GreenViewDelegate> @property (weak, nonatomic) IBOutlet UISlider *slider; @property (weak, nonatomic) IBOutlet UILabel *sliderTextValue; @property (weak, nonatomic) IBOutlet UIButton *EnterName; @property (weak, nonatomic) IBOutlet UILabel *NameValue; @property (weak, nonatomic) IBOutlet UIButton *LikeIOS; @property (weak, nonatomic) IBOutlet UISwitch *CheckboxIOS; @end 

ViewController.m

 #import "ViewController.h" #import "RedViewController.h" #import "GreenViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.sliderTextValue.text = [NSString stringWithFormat:@"Slider value = %d",(int)self.slider.value]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"yellowToGreen"]){ GreenViewController* gVC = segue.destinationViewController; gVC.sliderValuePassed = [NSString stringWithFormat:@"Slider value = %d",(int)self.slider.value]; gVC.delegate = self; }else if([segue.identifier isEqualToString:@"yellowToRed"]){ RedViewController* rVC = segue.destinationViewController; rVC.sliderValuePassed = [NSString stringWithFormat:@"Slider value = %d",(int)self.slider.value]; rVC.CheckboxIOS = self.CheckboxIOS; } } - (IBAction)sliderChangeValue:(id)sender { int sliderVal = self.slider.value; self.sliderTextValue.text = [NSString stringWithFormat:@"Slider value = %d",sliderVal]; } -(void)onSave:(NSString*)nameValue{ NSLog(@"onSave in father controller"); self.NameValue.text = [NSString stringWithFormat:@"Name = %@",nameValue]; } @end 

我假设你没有设置代表。

像这样设置:

  GreenViewController *myVc = [[GreenViewController alloc] init]; myVc.delegate = self; 

把这个在你的视图控制器视图做加载方法!

尝试使用GreenViewController.h:

 @property (nonatomic, assign) id<GreenViewDelegate> delegate; 

和GreenViewController.m:

 - (IBAction)save:(id)sender { [_delegate onSave:self.NameText.text]; [self.navigationController popViewControllerAnimated:YES]; } 

ViewController。*似乎是确定的