UISwitch没有反应

时间:2013-07-29 12:42:57

标签: ios objective-c

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

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

ViewController *vc = [[ViewController alloc] init];
if(variable ==YES){
   [vc.switch setOn:YES];
}else{
    [vc.switch setOn:NO];
}
然而,它始终未经检查。我能做错什么?我已经仔细检查了与IBOutlet的连接

3 个答案:

答案 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)

这是新开发人员最常遇到的问题。实际上我曾经遇到过同样的问题。那时我不知道发生这种情况的原因。我想我现在很清楚这些问题。

让我给你一些提示。

  1. 在呈现或推送viewcontroller之前,您永远不应该访问任何UIView控件。您可以在演示/推送后访问UIView控件。
  2. 您也可以通过设置布尔值来实现此目的。创建deafultSwitchStatus布尔属性,因为它的布尔类型此值将在viewDidLoad之前保留内存。您可以将此状态分配给UISwitch
  3. 中的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;
}];