1

在我的呈现视图控制器中,我有以下 prepareForSegue 函数

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([[segue identifier] isEqualToString:@"goToView2"]){
        ViewController2 *controller2 = [segue destinationViewController];
        controller2.multiplierStepper.value = 7.0;
        controller2.randomString = @"string set from Scene 1";
    }
}

在 ViewController2 中有一个我的 UIStepper 值的出口和一个 NSString

@property (strong, nonatomic) IBOutlet UIStepper *multiplierStepper;
@property (strong, nonatomic) NSString *randomString;

在 ViewController2.m viewDidLoad 中,我正在测试上面由呈现视图控制器设置的值

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.        
    NSLog(@"in viewDidLoad: self.multiplierStepper.value: %f", self.multiplierStepper.value);
    NSLog(@"in viewDidLoad: randomstring: %@", self.randomString);
}

控制台输出非常适合 NSString,但 UIStepper 值始终显示在 Interface Builder (1) 中定义的初始值。

[10682:f803] in viewDidLoad: self.multiplierStepper.value: 1.000000
[10682:f803] in viewDidLoad: randomstring: string set from Scene 1

答案可能非常明显,但我不知道如何从呈现视图控制器中设置目标视图控制器中步进器的值。

任何想法我做错了什么?

4

1 回答 1

2

不要在prepareForSeque方法中直接设置UIStepper的值,这样是不行的!

您必须声明一个包含该值的属性,然后在第二个控制器的 viewDidLoad 事件中设置步进器的值...

首先向您的第二个视图控制器 (ViewController2) 头文件声明一个附加属性:

@property (nonatomic) double stepperValue;

然后设置属性值:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([[segue identifier] isEqualToString:@"goToView2"]){
        ViewController2 *controller2 = [segue destinationViewController];
        controller2.stepperValue = 7.0;
        controller2.randomString = @"string set from Scene 1";
    }
}

然后在目标 viewController (ViewController2) 中:

- (void)viewDidLoad
{
    multiplierStepper.value = [self stepperValue];
}

笔记

请记住,最好的封装方式是将 IBOutlet 声明为类的私有成员,以避免类的客户端可以直接访问 IBOutlet;要将 IBOutlet 设为私有,您必须在 .m 文件的类扩展中声明它...

于 2012-07-14T08:30:01.193 回答