这可能很简单。我的xib中的UISwitch连接到IBOutlet“开关”。
然而,当我创建viewController时,我想检查变量是否为YES / NO,并且开关应该是正确的值。
ViewController *vc = [[ViewController alloc] init];
if(variable ==YES){
[vc.switch setOn:YES];
}else{
[vc.switch setOn:NO];
}
然而,它始终未经检查。我能做错什么?我已经仔细检查了与IBOutlet的连接
答案 0 :(得分:3)
你没有调用正确的方法; UISwitch
没有setOn
方法。它有on
属性和senOn:animated:
方法。
或者:
ViewController *vc = [[ViewController alloc] init];
vc.switch.on = variable
或:
ViewController *vc = [[ViewController alloc] init];
[vc.switch setOn:variable animated:YES];
注意,你已经在检查BOOL,我已经展示了如何在没有不必要的检查的情况下进行检查。
答案 1 :(得分:1)
这是新开发人员最常遇到的问题。实际上我曾经遇到过同样的问题。那时我不知道发生这种情况的原因。我想我现在很清楚这些问题。
让我给你一些提示。
UIView
控件。您可以在演示/推送后访问UIView控件。deafultSwitchStatus
布尔属性,因为它的布尔类型此值将在viewDidLoad
之前保留内存。您可以将此状态分配给UISwitch
viewDidLoad.
对象
醇>
简而言之。在UIView
方法之前未创建/加载viewDidLoad
个控件,并且在预先设置/推送任何控制器之后调用viewDidLoad
。这意味着如果您在展示/推送之前访问您的控件是零。这些控件不会对您的代码产生任何影响,因为它会被覆盖。
希望我解释得对:)
答案 2 :(得分:0)
您已创建ViewController,但未显示它。所以loadView从未被调用过你的.switch是零。 试试这个:
ViewController *vc = [[[ViewController alloc] init] autorelease];
[self presentViewController:vc
animated:YES
completion:^(){
vc.switch.on = variable;
}];