【问题标题】:How to set a default boolean for a switch button that was initialized by storyboard如何为情节提要初始化的开关按钮设置默认布尔值
【发布时间】:2017-08-15 01:29:16
【问题描述】:

我遇到了关于开关按钮默认值的问题。如果不使用切换按钮,Xcode 会给出错误“在展开可选值时意外发现 nil”。如果不使用切换按钮,我需要将默认值设置为 true 或 false。我找到了一些关于这个问题的文章,但它们对我没有用。

我的开关按钮是通过故事板初始化的:

@IBAction func FußballPreferenzSwitch(_ sender: UISwitch) {

    if (sender.isOn == true) {

        FußballPreferenz = "Ja"
    }else {

        FußballPreferenz = "Nein"
    }
}

以下解决方案不适合我,因为我没有钥匙,或者至少我不知道钥匙是什么。

在 applicationDidFinishLaunching 中,他们建议编写以下代码:

let userDefaults = UserDefaults.standard
let defaultValues : [String : Any] = ["key" : false]
userDefaults.register(defaults: defaultValues)

我需要如何更改以下代码才能将其用于我的目的? 或者有没有其他方法可以解决这个问题?

【问题讨论】:

  • 未使用是什么意思?您可以直接在 Interface Builder 中设置默认值。
  • 这意味着,按钮没有被触摸。当按钮没有被触摸时,开关按钮的布尔值应该为真,这样变量“FußballPreferenz”就等于=“Ja”。
  • 不清楚你要完成什么。切换后是否要保留该值?为什么以及何时会出现 unexpected found ... 错误?
  • 当我实现切换按钮时,它的布尔值为真(切换按钮为绿色)。用户可以使用切换按钮来决定他喜欢足球(切换按钮是绿色/值=true)还是不喜欢它(按钮是白色/值=false)。所以如果用户打开视图控制器,切换按钮默认是绿色的。因此,如果他喜欢足球,则无需切换按钮。如果我现在将此信息发送到我的 Firebase 控制台,我会收到致命错误“在展开可选值时意外发现 nil”。
  • 在 Interface Builder 中设置默认值 (true)。崩溃的发生很可能是因为IBAction 未在 IB 中正确连接。如果开关的状态保存在 FireBase 中,则您不需要 UserDefaults,但您需要从 FireBase 读取值并在应用程序启动时更新开关(或当控制器将出现时)。顺便说一句:在 Swift 中,if 表达式不需要括号,在布尔求值之后也不需要 == true

标签: ios swift3 boolean uiswitch


【解决方案1】:

为您的开关设置一个IBOutlet,然后设置为viewDidloadviewDidAppear(根据您的要求设置)

if uiSwitch.isOn {
   FußballPreferenz = "Ja"
} else {
   FußballPreferenz = "Nein"
}

这可以确保即使用户没有更改 switch 的值,storyboard 上设置的默认值也会反映在 didload/didappear 上的变量中。

【讨论】:

  • 干杯伙伴!这确实有效。再问一个问题。你知道如何用分段控件解决同样的问题吗?
【解决方案2】:

只是为了防止其他人(我是新手)正在搜索 sn-p:

在代码顶部(类定义)添加:

@IBOutlet weak var switchImageBeingDisplayed: UISwitch!

并进一步定义按钮:

@IBAction func switchImageBeingDisplayedChanged(_ sender: Any) {
    if switchLockLanguages.isOn {
        image1.isHidden = true}
    else {
        image2.isHidden = false
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多