【问题标题】:Programmatically change state of a UISwitch bugs以编程方式更改 UISwitch 错误的状态
【发布时间】:2012-11-06 16:35:18
【问题描述】:

我正在尝试使用 [self.mySwitch setOn:YES animated:YES]; 方法动态更改 UISwitch

代码中的状态也发生了变化,因此机制工作正常,但在视图中状态没有改变。所以我得到一个 UISwitch 显示为 OFF 并像 ON 一样工作。

当我点击它时,开关变为 ON。所以我必须点击它两次才能启动代码的 inCaseOff 部分。

我希望这已经足够清楚了。

[编辑]

这是你问的代码

- (void)viewDidLoad
{
   [self manageTheSwitch];
}

- (void) manageTheSwitch{
    self.mySwitch = [[UISwitch alloc]init];
    if(randomObject != nil){
        [self.mySwitch setOn:YES animated:YES];
    }else{
        [self.mySwitch setOn:NO animated:YES];
    }
}

【问题讨论】:

  • 尝试检查您是否更新了主线程上的开关状态。无论如何,您提供的信息太少,无法帮助您,可以发布更多代码吗?
  • 您是否将此开关添加到您在 IB 或代码中的视图中?
  • 我意识到我的错误。我不应该重新分配 mySwitch,这会暂时破坏控制器和 mySwitch 之间的链接。删除这个“self.mySwitch = [[UISwitch alloc]init];”解决了我的问题。非常感谢您的回答。

标签: objective-c ios uiswitch


【解决方案1】:

您正在以编程方式将一个不同的 UISwitch 设置为视图中显示的那个。您根本不必执行[[UISwitch alloc]init],而是应该通过控制器中的IBOutlet 属性检索它(连接到您在IB 中的视图)。

假设您确实连接了 mySwitch,那么您需要做的就是删除此行:

self.mySwitch = [[UISwitch alloc]init];

【讨论】:

    【解决方案2】:

    您的问题是,您在 manageTheSwitch 方法中实例化了一个新按钮,而不是访问您在情节提要中创建的按钮。只需消除该 alloc init 即可。

    【讨论】:

      【解决方案3】:

      尝试使用 UISwitch 继承自 UIControl 的“选定”属性: self.mySwitch.selected = YES;

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-25
        • 1970-01-01
        相关资源
        最近更新 更多