Как получить доступ к значению текстового поля и преобразовать в двойной - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь создать калькулятор чаевых с помощью swift, но сталкиваюсь с множеством проблем. У меня есть текстовое поле, в котором пользователь вводит сумму счета, а затем он может настроить ползунок, чтобы указать процент, который он хочет чаевые. Мне удалось заставить ползунок и метку, связанную с ним, работать, где изменение значения на ползунке меняет метку. Однако я не могу понять, как заставить текстовое поле работать. Я попытался создать действие для изменяемого текстового поля суммы счета, но независимо от того, что я в него вставил, не похоже, что код выполняется когда-либо (Всякий раз, когда я запускаю код и нажимаю в текстовом поле, клавиатуране уйдет, так что, может быть, это часть проблемы?). Все, что мне нужно, - это иметь возможность получить доступ к значению в поле текстового поля внутри моего действия, когда я нажимаю кнопку вычисления, но, похоже, я даже не могу получить значение, отображаемое намного реже, конвертируя его в двойное число, поэтому яможете выполнить расчеты на нем. Я супер новичок в быстрой и очень хочу узнать, что я делаю не так. Я пробовал несколько учебных пособий и подобных вопросов, но ни один из них не работает. Я ценю любую помощь, которую вы можете оказать.

    import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var txtBillAmount: UITextField!
    @IBOutlet weak var lblTipPercentage: UILabel!
    @IBOutlet weak var sldTipPercentage: UISlider!
    @IBOutlet weak var lblTipAmount: UILabel!
    @IBOutlet weak var lblTotalAmount: UILabel!

    var tipPercentage = 10
    var billAmount = ""


    @IBAction func valueChanged(sender: AnyObject) {
        let currentValue = Int(sldTipPercentage.value)
        lblTipPercentage.text = "\(currentValue)%"
        tipPercentage = currentValue

    }


    @IBAction func btnCalculate(sender: AnyObject) {
        lblTipAmount.text = "\(billAmount)"

    }

    @IBAction func txtBillAmountValueChanged(sender: AnyObject) {
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        //txtBillAmount.delegate = self

        // Do any additional setup after loading the view, typically from a nib.
    }

    @IBAction func btnReset(sender: UIButton) {
        sldTipPercentage.value = 10
        lblTipPercentage.text = "10%"
        txtBillAmount.text = ""
        lblTipAmount.text = "--"
        lblTotalAmount.text = "--"
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

Это скриншот того, как выглядит пользовательский интерфейс

Ошибка, которую я получаю

1 Ответ

0 голосов
/ 01 ноября 2019

[Xcode> = 7 и Swift> 2]

Попробуйте вот так

@IBAction func btnCalculate(sender: AnyObject) {
      if let textValue = txtBillAmount.text {
         let billAmnt = Double(textValue)

         let tipAmount = (billAmnt*tipPercentage)/100

         lblTipAmount.text = "\(tipAmount)"
      }
}

Если вы используете Xcode-6 и Swift <2 </strong> затем попробуйте следующий способ. потому что String initializer для Double доступно только в Swift 2 (Xcode 7). [Рекомендовать update your Xcode]

@IBAction func btnCalculate(sender: AnyObject) {
      let billAmnt = (txtBillAmount.text! as NSString).doubleValue
      let tipAmount = (billAmnt*tipPercentage)/100

      lblTipAmount.text = "\(tipAmount)"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...