0

这可能很简单。我的 xib 中的 UISwitch 连接到 IBOutlet“开关”。

但是,当我创建 viewController 时,我想检查变量是否为 YES/NO,并且开关应该是正确的值。

ViewController *vc = [[ViewController alloc] init];
if(variable ==YES){
   [vc.switch setOn:YES];
}else{
    [vc.switch setOn:NO];
}

但是它总是未经检查。我可能做错了什么?我已经仔细检查了与 IBOutlet 的连接

4

3 回答 3

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,我已经展示了如何在没有不必要检查的情况下进行检查。

于 2013-07-29T13:12:02.197 回答
1

这是新开发人员最常见的问题。其实我曾经有同样的问题。当时我不知道发生这种情况的原因。我想现在我对这些问题很清楚了。

让我给你一些提示。

  1. UIView在呈现或推送视图控制器之前,您不应该访问任何控件。您可以在呈现/推送后访问 UIView 控件。
  2. 您也可以通过设置布尔值来实现这一点。创建deafultSwitchStatus布尔属性,因为它是布尔类型,此值将保留在之前的内存中viewDidLoad。您可以将此状态分配给您的UISwitch对象viewDidLoad.

简而言之。UIView控件不会在viewDidLoad方法之前创建/加载,viewDidLoad而是在预设/推送任何控制器之后调用。如果您在呈现/推送之前访问,这意味着您的控件为零。这些控件不会对您的代码产生任何影响,因为它将被覆盖。

希望我解释正确:)

于 2013-07-29T13:55:35.810 回答
0

您已经创建了 ViewController,但没有展示它。所以 loadView 从来没有被调用过,你的 .switch 是零。尝试这个:

ViewController *vc = [[[ViewController alloc] init] autorelease];
[self presentViewController:vc
                   animated:YES
                 completion:^(){
    vc.switch.on = variable;
}];
于 2013-07-29T13:18:05.070 回答