在我的呈现视图控制器中,我有以下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
答案可能非常明显,但我无法弄清楚如何从呈现视图控制器中设置目标视图控制器中步进器的值。
任何想法我做错了什么?
答案 0 :(得分: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文件中的类扩展中声明它...