【发布时间】:2015-11-25 19:39:00
【问题描述】:
我想使用委托将 UITextField *nameText 从 GreenViewController 传递给 ViewController 中的 UILabel *nameValue。
我做了委托,ViewController 中的 onSave 方法被调用了,但是屏幕没有返回,名字也没有传递。 问题是什么? 以下是头文件和执行文件:
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
【问题讨论】:
-
你在哪里设置了代理?
-
这是我的全部代码,不设置委托可能是我的问题。我不知道该怎么做以及在哪里写。我很高兴你能帮助@Mr.T
标签: ios objective-c iphone delegates