【问题标题】:Swift: Change UISwitch status when a button is clicked on with the same tagSwift:单击具有相同标签的按钮时更改 UISwitch 状态
【发布时间】:2016-02-03 21:28:31
【问题描述】:

我有这个函数,它得到一个 UISwitch 与触发该函数的按钮具有相同的标记值,然后它意味着将 UISwitch 的状态更改为 true:

let tagToSwitch = self.view.viewWithTag(sender.tag) as? UISwitch
tagToSwitch?.setOn(true, animated: true)

但是这不起作用,如果我更改 tagToSwitch! 应用程序崩溃并返回错误 'fatal error: unexpectedly found nil while unwrapping an Optional value' 尽管我不确定我在哪里出错,就像我之前打印 sender.tag 值时一样这样,它会打印出正确的值。

感谢任何帮助。

【问题讨论】:

    标签: xcode swift uiswitch viewwithtag


    【解决方案1】:

    viewWithTag 可能无法获得您想要的视图。您可以尝试使用 for 循环。

    for view in self.view.subviews {
        if let tagToSwitch = view as? UISwitch {
            if tagToSwitch.tag == sender.tag {
                tagToSwitch.setOn(true, animated: true)
            }
        }
    }
    

    【讨论】:

    • 谢谢!那行得通:)虽然,我也使用我在问题中提到的类似代码来更改同一功能中按钮的背景颜色,并且有效。它确实让我想知道为什么它不能与 UISwitch 一起使用
    • 我会说,由于该标签的视图不止一个,因此该函数会返回它找到的第一个视图,而不一定是您想要的那个。
    • 嗯...我的印象是我的代码正在使用标记sender.tag 获取视图中的所有 UISwitch 项。因为所有 UISwitch 项都是在 for 循环和 for 循环中创建的,所以标签会在创建时添加,并且每当您单击开关或按钮时它都会打印正确的标签
    • 代码viewWithTag 只返回一个视图,如果有多个视图带有您要查找的标签,那么您可能无法获得您想要的那个。在您的情况下,它可能是拿起按钮而不是开关,因为它们具有相同的标签。使用上述 for 循环可确保您检查所有视图,而不是停留在一个视图。
    • 啊,好的。感谢您清除它。您是否建议我将其他地方的代码从我必须的代码更改为您回答的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2016-08-01
    相关资源
    最近更新 更多