【问题标题】:Multiply label with numbers with textfield with numbers将带有数字的标签与带有数字的文本字段相乘
【发布时间】:2015-08-09 09:00:39
【问题描述】:

希望大家可以帮助我。我是新来的。 如何将标签l1(从pickerview 获取数据(数字))与文本字段txt(获取用户输入(数字))相乘。计算应从按钮b 开始。感谢您的帮助

class Flächenbewehrung : UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

var pickerDataSource = ["Ø 6","Ø 8"]

@IBOutlet weak var myPicker: UIPickerView!
@IBOutlet weak var myLabel: UILabel!
@IBOutlet var txt: UITextField!

@IBOutlet var l1: UILabel!

@IBAction func b(sender: AnyObject) {




}
override func viewDidLoad() {
    super.viewDidLoad()
    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    myPicker?.delegate = self
    myPicker?.dataSource = self
}

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerDataSource.count
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    return pickerDataSource[row]
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if(row==0)
    {
        myLabel.text = "0,4"
    }
    else if(row==1)
    {
        myLabel.text = "0,6"
    }
}

【问题讨论】:

  • 你想怎么乘?你能举个例子吗?
  • 用户在pickerview中选择例如Ø 6。然后存款值将显示在mylabel(来自pickerview的数据)= 0,4 ccm(见上文)。然后将文本字段与用户输入 = 5 或 6 相乘。输入始终是数字。示例 multibly = 0,4 * 6。结果应累积在另一个文本字段中
  • Andreas, du wirst auf jeden Fall Probleme mit dem deutschen Dezimaltrenner bekommen(Andreas 无论如何使用德语小数分隔符都会遇到问题)。我建议使用数字格式化程序来显示本地化值,但使用本机小数分隔符. 进行计算。要在 Swift 中进行数学运算,您必须将字符串表示形式转换为它们的等效数字,并且您必须对所有数学运算的左侧和右侧使用相同的类型(IntDouble 等)。
  • @vadian - 你说德语?也许我可以更好地解释它?
  • 是的,可惜这个论坛的语言是英文

标签: ios swift xcode6


【解决方案1】:

我还是不明白你的意思。

你可以在pickerView:didSelectRow:做数学运算

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
  var multiplicator : Double = 1.0
  if (row == 0)
  {
    myLabel.text = "0,4"
    multiplicator = 0.4
  }
  else if (row == 1)
  {
    myLabel.text = "0,6"
    multiplicator = 0.6
  }

  let result = multiplicator *  (txt.text! as NSString).doubleValue
  // If you want to display the result in a label use
  // anyLabel.text = "\(result)"
}

代码不包含任何错误处理,例如标签txt中的文本值可转换为Double

【讨论】:

  • 谢谢。没有显示错误。但 label.text = "(result)" 仅在文本字段中显示输入。
  • 请看注释行。我注释掉了显示结果的行,因为我不知道应该显示什么标签
  • 是的。我懂了。我这样做。但它只显示文本字段输入.....我稍后再测试
  • 好的,我再次测试它。问题是,如果我写 let result = multiplicator * 2 那么他乘以它是正确的。当我使用 let result = multiplicator * (txt.text! as NSString).doublevalue 标签显示我 0.0
  • 好的,我发现了错误。当用户填写文本字段时,如何重新加载 ausgabe.txt?现在我必须改变pickerview,然后他multibly。
【解决方案2】:

我只是将数字与标签分开存储在不同的属性中。所以例如你可以这样做:

class Flächenbewehrung : UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

var pickerDataSource = ["Ø 6","Ø 8"]

@IBOutlet weak var myPicker: UIPickerView!
@IBOutlet weak var myLabel: UILabel!
@IBOutlet var txt: UITextField!
var txtNumber: Double = 0.0 // Update this when you update txt
@IBOutlet var l1: UILabel!
var myLabelNumber: Double = 0.0 // Update this when you update l1
@IBAction func b(sender: AnyObject) {

  let result = txtNumber * myLabelNumber
  println(result) // Just for debug
  // store result somewhere or show it in your interface somehow

}

// ETC....

}

【讨论】:

  • 谢谢。但我会乘以 mylabel * 文本字段。不能乘以 l1。 l1 代表结果。我改变了。现在我有一个错误(Flächenbewhrung 类没有 initialzier)??
  • 我已经用默认值更新了答案。在 Swift 中,所有非可选项都必须被初始化。要么给你一个默认值,要么让它们成为可选的。试试看:还是错误?
  • 这行得通。但不是当我将结果显示在标签或另一个文本字段中时。对不起
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 2012-04-17
  • 2019-02-28
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
相关资源
最近更新 更多