ios - UITextfield 作为 float 通过 segue 传递到 UILabel

标签 ios swift segue

我对 swift 相当陌生,希望用户使用 UITextfield 的小数点输入数字来输入 float ,然后使用 UILabel 将该 float 传递到另一个 View Controller 。除了将 float 传递给另一个 View Controller 上的 UILabel 之外,一切正常。我收到此错误

"Cannot assign value of type 'UITextField?' to type 'UILabel?'"

import UIKit

class SelectAttributesViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {

    @IBOutlet weak var kitPickerView: UIPickerView!
    @IBOutlet weak var reactionVolumeLabel: UILabel!
    @IBOutlet weak var numberOfSampleTextField: UITextField!
    @IBOutlet weak var volumeOfTemplateDNATextField: UITextField!
    @IBOutlet weak var slider: UISlider!
    @IBOutlet weak var calculateButton: UIButton!

    let kits = ["kit 1", "Kit 2"]
    let pArray = [10,20,50]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.numberOfSampleTextField.delegate = self
        self.volumeOfTemplateDNATextField.delegate = self
        kitPickerView.dataSource = self
        kitPickerView.delegate = self



        let tap = UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:)))
        view.addGestureRecognizer(tap)


    }

    func pSliderInterval() {
        slider.minimumValue = 0
        slider.maximumValue = Float(pArray.count)
        slider.isContinuous = false

    }


    @IBAction func reactionVolumeSlider(_ sender: UISlider) {
        print(Int(sender.value))
        let currentValue = pArray[Int(sender.value)]
        reactionVolumeLabel.text = "\(currentValue) "


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

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

    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if row == 0{ print(kits[row])

        }else if row == 1{
           createAlert(title: "Kit not available", message: "More kits will be added soon!")
            calculateButton.isEnabled = false
        }

    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return kits[row]
    }
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
           guard let oldText = textField.text, let r = Range(range, in: oldText) else {
               return true
           }

           let newText = oldText.replacingCharacters(in: r, with: string)
           let isNumeric = newText.isEmpty || (Double(newText) != nil)
           let numberOfDots = newText.components(separatedBy: ".").count - 1

           let numberOfDecimalDigits: Int
           if let dotIndex = newText.firstIndex(of: ".") {
               numberOfDecimalDigits = newText.distance(from: dotIndex, to: newText.endIndex) - 1
           } else {
               numberOfDecimalDigits = 0
           }

           return isNumeric && numberOfDots <= 1 && numberOfDecimalDigits <= 2
       }
    func createAlert (title: String, message: String){
           let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert)
           alert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler: { (Action) in
               alert.dismiss(animated: true, completion: nil)
           }))
           self.present(alert, animated: true, completion: nil)

       }
    // This is the Segue.
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        var masterMix = segue.destination as! MasterMixTableViewController

        masterMix.waterVolumeLabel = numberOfSampleTextField
    }

    @IBAction func calculatePressed(_ sender: Any) {
        if numberOfSampleTextField.text != ""{
            performSegue(withIdentifier: "masterMixSegue", sender: self)
        }

    }




}

我已经大量浏览了解决方案,但没有找到任何东西。

最佳答案

你需要

let masterMix = segue.destination as! MasterMixTableViewController
masterMix.loadViewIfNeeded()
masterMix.waterVolumeLabel!.text = numberOfSampleTextField!.text

关于ios - UITextfield 作为 float 通过 segue 传递到 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59594503/

相关文章:

ios - 无论如何检查应用程序何时会被暂停?

iOS 开发图库

ios - 如何快速等待 POST 调用的结果?

ios - 当表格 View 在两个部分 Swift 中滚动时,文本字段变为空白

ios - 从选项卡 View Controller 执行 Push Segue

ios - 关闭由自定义推送序列到达的 View Controller

ios - Storyboard,不再识别 UIControl 操作

ios - 在 Swift Core Data 中设置一对多关系的问题

ios - 具有动态大小内容的 UIScrollView

iOS segue 两次屏幕