UISwitch 在 Swift 中没有改变值

Posted

技术标签:

【中文标题】UISwitch 在 Swift 中没有改变值【英文标题】:UISwitch not changing value in Swift 【发布时间】:2016-03-04 17:12:12 【问题描述】:

我在我的 Swift 2.2 应用程序中使用了这个小功能:

func changeSwitchValue() 


    if self.lampValue == 1 
        self.switch0.setOn(true, animated: false)
        print("changed to 1")
    
    if self.lampValue == 0 

        self.switch0.setOn(false, animated: true)
        print("changed to 0")
    

调用该函数时,它会打印出我询问的所有内容,但开关值永远不会改变!

我尝试在 ViewDidLoad 中使用switch0.setOn(true, animated:true),它在那里工作。当被这个函数调用时,它不起作用。如果我通过 IBAction 调用这段代码,它也不起作用..

有人知道这个奇怪的问题吗?有什么建议吗?

谢谢!

【问题讨论】:

什么是lampValue?您正在尝试根据lampValue 设置开关的状态,我们不知道它是什么。 你怎么称呼这个 @CharlesTruluck lampValue 是我家灯的价值。它可以是 0 或 1 @ChristianDietrich 在收到 UDP 包后调用它,但当我从 ViewDidLoad 或按钮调用它时不起作用 @ChristianDietrich 我再次测试,结果当我直接从 ViewDidLoad 调用它时,它确实有效。但是当我从 UDP 服务器函数调用它时,它不起作用 【参考方案1】:

确保在主线程上执行 ui 操作

    dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0))  () -> Void in
        // do the networking here
        // if you are done update the ui on the main thread
        dispatch_async(dispatch_get_main_queue()
            )  () -> Void in
                self.mySwitch.setOn(!self.mySwitch.on, animated: true)
        
    

【讨论】:

非常感谢您指出这一点!因为 UDP 服务器一直在运行,所以它在后台线程上。此函数由导致它的后台线程调用。我早该知道的!再次非常感谢!【参考方案2】:

您没有发布足够的代码,但我会假设 switch0 是一个位于 nib 中的 UISwitch,并在视图控制器中声明如下:

@IBOutlet weak var switch0: UISwitch!

如果不是这样,所有的赌注都没有了 :) 所以我的反馈是,你确定 switch0 连接到笔尖的正确插座吗?

【讨论】:

是的。 I 这个问题是由于没有在主线程上完成造成的。不过还是谢谢你的提醒 :)

以上是关于UISwitch 在 Swift 中没有改变值的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift之UI控件UISwitch与UISegmentedControl扩展的使用

Swift - UISwitch

在 UITests 中获取 UISwitch 状态/值

如何以编程方式切换uiswitch按钮

在 TableViewCell 中保持 UISwitch 的状态:Swift

在swift怎么创建podfile文件