【问题标题】:I need help creating two radio buttons in a View Controller using Swift我需要帮助使用 Swift 在视图控制器中创建两个单选按钮
【发布时间】:2019-02-17 08:34:30
【问题描述】:

code for radio buttons 我目前正在使用 Xcode 在 Swift 中开发一个 iOS 应用程序,我的任务是创建两个会影响总价值的单选按钮。第一个单选按钮需要返回一个四舍五入到最接近的整数或半数 (.5) 的值,第二个单选按钮只会向上或向下四舍五入到最接近的整数。我已经在视图控制器中创建了 UI 单选按钮(用于我的设置屏幕)。希望是根据所选的相应单选按钮使我的应用程序中的总值受到影响。我需要帮助使其正常运行。

这是给我的四舍五入规则:

单选按钮 #1:

  • 0.0 到 0.24(四舍五入到零)

  • 0.25 到 0.49(向上取整到 0.5)

  • 0.5 到 0.74(向下舍入到 0.5)

  • 0.75 到 0.99(四舍五入到最接近的整数)

单选按钮 #2:

  • 0.00 到 0.49(四舍五入到零)

  • 0.50 到 0.99(四舍五入到最接近的整数)

【问题讨论】:

  • 你已经尝试了什么?
  • 由于“单选按钮”不是原生 iOS 类,请提供更多详细信息。 (iOS 中的单选按钮与UISegmentedControl 最相似,因为存在单一状态的非此即彼的东西。)您的问题有什么问题吗?您的每个单选按钮都有范围。所以,是的,请提供更多详细信息。
  • 让我解释一下,以防你不知道我在说什么。 “第一个单选按钮需要返回一个值,该值将四舍五入为最接近的整数或半数 (.5)....” 一个 按钮 - 可以分段,正常或其他任何东西 - 有一个单一的“状态”......按下,突出显示,正常,等等。这包括“单选按钮”。我不知道任何按钮......无论平台如何,我都有近 40 年的编码和 25 个编码 GUI/ui ......具有“简单”舍入未定义数字的能力。 (而且你没有给出任何代码,所以是的,它完全未定义。)
  • 感谢您的回复。刚刚添加了代码图片的链接,希望对您有所帮助。
  • 始终将代码、错误消息等添加为文本 - 这样它们就可以搜索,并且可以在编写答案时复制。请edit您的问题。

标签: ios swift xcode radio-button viewcontroller


【解决方案1】:

根据您的要求有两个功能。在您的原始代码中,它呈现与 roundHalf 函数相同的情况。

如果我的理解是正确的,你的值应该限制在 0

由于是单选按钮,每次只能选择一个按钮。所以请禁用另一个。

@IBOutlet var unitPenRadioButton1 :   UIButton!
@IBOutlet var unitPenRadioButton2 :   UIButton!

func calculateInsulin(carbs: Double, bloodSugar : Double, icRatio: Double, correctionFactor: Double)-> Double{
    do{
    let carbResult = Double(carbs / icRatio)

    var bloodResult: Double = 0

    if bloodSugar - 150 > 1{
        bloodResult = (bloodSugar - 150) / correctionFactor
    }
    let wholeBloodResult = Double(Int (bloodResult))

    let fractionBloodResult = bloodResult - wholeBloodResult

    var roundedFaction : Double

    roundedFaction = unitPenRadioButton1.isSelected  ?  try roundHalf( fractionBloodResult) : try roundWhole(fractionBloodResult)

    let finalBloodResult = wholeBloodResult + roundedFaction

    let insulinResult  = carbResult + finalBloodResult

         return insulinResult
    }
    catch let error as NSError{
        print (error)
    }

    return Double.greatestFiniteMagnitude
}




private func roundHalf(_ value : Double ) throws ->  Double{
    guard  value >= 0 && value <= 1 else {
    throw NSError.init(domain: NSCocoaErrorDomain, code: 60010, userInfo: ["error" : "value is not within [0,1]"])
    }
    return  round(value * 2.0) / 2.0
}
private func roundWhole(_ value : Double )throws ->  Double{
    guard  value >= 0 && value <= 1 else {
    throw NSError.init(domain: NSCocoaErrorDomain, code: 60010, userInfo: ["error" : "value is not within [0,1]"])
    }
    return  round(value)
}

@IBAction func didTapHalfUnit (_ sender : Any){
    unitPenRadioButton2.isSelected = false
    unitPenRadioButton1.isSelected = true
    print( calculateInsulin(carbs: 100, bloodSugar: 170, icRatio: 600, correctionFactor: 45) )
}

@IBAction func didTapWholfUnit (_ sender : Any){
    unitPenRadioButton1.isSelected = false
    unitPenRadioButton2.isSelected = true
    print( calculateInsulin(carbs: 100, bloodSugar: 170, icRatio: 600, correctionFactor:45) )
}

【讨论】:

  • 在答案中添加一些细节和上下文会很有帮助。这似乎是原始海报(OP)可能能够使用的一些舍入代码。如果是这样,您可以添加更多细节以帮助他们了解它是如何工作的或他们为什么要使用它。他们可能还需要一些帮助,例如如何将此代码连接到他们的单选按钮,这样您也可以提供一些相关信息......
  • 谁给否定,告诉我们原因。我根据他的代码更新我的答案。
  • 我没有给你投反对票,E.Coms;但我很确定原因。在 StackOverflow 上,你的答案可以被全世界的人阅读,甚至在未来几年。您需要提供的不仅仅是代码。解释该代码如何或为什么回答问题。您在答案中添加了更多代码 - 这很可能是一个解决方案 - 但您仍然没有告诉我们它如何或为什么有助于解决 OP 的问题。
  • 没问题。我添加了一些 cmets
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2013-02-24
  • 2011-09-02
  • 2015-06-11
  • 2013-10-09
  • 2010-11-13
相关资源
最近更新 更多