如何获取UITextField用户输入并转为Int变量用于计算?
解决方案
首先,在你的ViewController类里加两个实例变量,用来存转换后的整数值:
class ViewController: UIViewController { // 定义存储输入值的变量,可选Int类型,初始为nil private var sMin: Int? private var sMax: Int? // 原有的viewDidLoad等代码... }
接下来,把两个@IBAction方法补全,把输入框里的文本转成整数存到变量里,同时处理空输入或者非数字的情况:
@IBAction func sMinInput(_ sender: UITextField) { // 先把输入的文本去掉首尾空格,空的话就把变量设为nil guard let inputText = sender.text?.trimmingCharacters(in: .whitespacesAndNewlines), !inputText.isEmpty else { sMin = nil return } // 尝试转成Int,成功就赋值,失败也设为nil sMin = Int(inputText) } @IBAction func sMaxInput(_ sender: UITextField) { guard let inputText = sender.text?.trimmingCharacters(in: .whitespacesAndNewlines), !inputText.isEmpty else { sMax = nil return } sMax = Int(inputText) }
额外优化:只允许输入数字
要是不想让用户输入非数字内容,可以给输入框加代理限制输入:
- 先让ViewController遵循UITextFieldDelegate协议:
class ViewController: UIViewController, UITextFieldDelegate { // ... 原有代码 }
- 在viewDidLoad里给两个输入框设置代理(前提是你已经给输入框加了IBOutlet,比如
sMinTextField和sMaxTextField):
override func viewDidLoad() { super.viewDidLoad() let tap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard)) view.addGestureRecognizer(tap) // 设置输入框的代理 sMinTextField.delegate = self sMaxTextField.delegate = self }
- 实现代理方法限制只能输入数字和退格:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // 允许数字和退格键输入 let allowedChars = CharacterSet.decimalDigits.union(CharacterSet(charactersIn: "\b")) let inputChars = CharacterSet(charactersIn: string) return allowedChars.isSuperset(of: inputChars) }
用变量计算的时候
当你要拿这两个变量做计算时,得先检查它们有没有有效值:
// 示例计算方法,换成你自己的实际逻辑 private func doCalculation() { guard let minValue = sMin, let maxValue = sMax else { // 输入无效时弹个提示 let alert = UIAlertController(title: "提示", message: "请输入有效的整数", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "确定", style: .default)) present(alert, animated: true) return } // 这里写你的公式计算 let result = maxValue - minValue print("计算结果:\(result)") }
内容的提问来源于stack exchange,提问作者Neph
相关产品推荐
相关产品推荐

