【问题标题】:UISwitch not reactionUISwitch没有反应
【发布时间】:2013-07-29 12:42:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      让我给你一些建议。

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

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

      希望我解释正确:)

      【讨论】:

        【解决方案3】:

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

        ViewController *vc = [[[ViewController alloc] init] autorelease];
        [self presentViewController:vc
                           animated:YES
                         completion:^(){
            vc.switch.on = variable;
        }];
        

        【讨论】:

        • 如果他不想展示怎么办?如果 vc 应该被推送怎么办。
        • loadView 在 pushViewController 内部被调用,所以你可以在推送视图控制器后设置 UISwitch 的值。我无法在您的回答中添加评论,但 vc.switch.on = variable 等于 [vc.switch setOn:variable]
        猜你喜欢
        • 2011-08-02
        • 2017-02-09
        • 2021-11-11
        • 2020-10-28
        • 2020-10-22
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        相关资源
        最近更新 更多