Objective c - 使用委托传回字符串值 [英] Objective c - pass back string value using delegate

查看:70
本文介绍了Objective c - 使用委托传回字符串值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用委托将GreenViewController中的UITextField * nameText传递给ViewController中的UILabel * nameValue。

I want to pass UITextField *nameText from GreenViewController to UILabel *nameValue in ViewController using delegate.

我创建了委托,调用了ViewController中的onSave方法但是屏幕不回去,名字没有通过。
有什么问题?
以下是标题和紧急文件:

I made delegate, the onSave method in ViewController is called but the screen is not going back and the name is not passed. What is the problem? Here are the header and impelentation files:

GreenViewController.h

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

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

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

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


推荐答案

我假设您没有设置代理。

I assume you didnt set the delegate .

设置如下:

  GreenViewController *myVc = [[GreenViewController alloc] init];

  myVc.delegate = self;

把它放在你的视图控制器视图中加载方法!!!

Put this in your view controller view did load method!!!

这篇关于Objective c - 使用委托传回字符串值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆