input - Swift 4 - 基于不同的 TextField 输入启用/禁用两个 UI 按钮
问题描述
我觉得我缺少此代码集的基本步骤,并且非常感谢任何见解,因为尽管搜索了这些论坛,但我找不到一个很好的解决方案。
我有四个文本字段、两个 UI 按钮和两个标签。
当前三个文本字段输入时,应该启用其中一个 UI 按钮,允许我计算这三个文本字段的总和并将其显示在第一个标签上。
仅当第四个文本字段具有输入时,才应启用第二个 UI 按钮。第二个标签将包含所有四个文本字段的总和。如果不满足这些条件,则应禁用 UI 按钮。
我的第一种情况很好,但是当我尝试合并第四个文本字段和第二个按钮时,事情变得一团糟。查看最后一个片段:让 regurgVTI = AIVTI.text, !regurgVTI.isEmpty
类 AICalc: UIViewController {
@IBOutlet weak var PISARadius: UITextField!
@IBOutlet weak var aliasingVelocity: UITextField!
@IBOutlet weak var AIVMax: UITextField!
@IBOutlet weak var AIVTI: UITextField!
@IBOutlet weak var EROAAnswer: UILabel!
@IBOutlet weak var RegurgVolumeAnswer: UILabel!
@IBOutlet weak var calcEROAButton: UIButton!
@IBOutlet weak var regurgVolumeButton: UIButton!
@IBAction func calcEROA(_ sender: UIButton)
{
EROAAnswer.text = String(Int(PISARadius.text!)! + Int(aliasingVelocity.text!)! + Int(AIVMax.text!)!)
}
@IBAction func calcRegurgVolume(_ sender: UIButton)
{
RegurgVolumeAnswer.text = String(Int(PISARadius.text!)! + Int(aliasingVelocity.text!)! + Int(AIVMax.text!)! + Int(AIVTI.text!)!)
}
override func viewDidLoad()
{
super.viewDidLoad()
calcEROAButton.isEnabled = false
regurgVolumeButton.isEnabled = false
PISARadius.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
aliasingVelocity.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
AIVMax.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
AIVTI.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@objc func editingChanged(_ textField: UITextField) {
if textField.text?.count == 1 {
if textField.text?.first == " " {
textField.text = ""
return
}
}
guard
let pisa = PISARadius.text, !pisa.isEmpty,
let aliasing = aliasingVelocity.text, !aliasing.isEmpty,
let vmax = AIVMax.text, !vmax.isEmpty
else {
calcEROAButton.isEnabled = false
regurgVolumeButton.isEnabled = false
return
}
calcEROAButton.isEnabled = true
let regurgVTI = AIVTI.text, !regurgVTI.isEmpty
}
}
解决方案
使用 textField.tag 或 textField.identifier 来识别文本字段,然后您可以轻松解决您的问题。
假设您的第一个三个文本字段同时具有标签 1,2,3。
然后在您的文本字段中进行 end_Enditing :-
if textfield.tag == 1 {
//Do whatever you want
}
if textfield.tag == 2 {
//Do whatever you want
}
if textfield.tag == 3 {
//Do whatever you want
}
参考this可能会解决您的问题。好运。
推荐阅读
- google-people-api - 我们可以在 PHP 的 Google People API 中使用多个范围吗
- cmake - CMake“FILES_MATCHING_PATTERN”复制空目录
- knockout.js - hasFocus knoukoutjs 数据绑定如何在 textarea 表单输入上工作
- php - 如何将选择放入数组中?
- jquery - jquery在一定数量的子元素后删除子元素
- kubernetes - 按计划调整实例组的大小
- java - Android中是否有任何用于网络连接检查的注释处理库?
- abap - 哪个具有更好的性能:SELECT...ENDSELECT (1 by 1) 或 SELECT...INTO TABLE / LOOP AT
- memcpy - 如何将 1d qvector 复制到 2d qvector 的特殊列中?
- python - 如何修复 TVL1 光流算法的 opencv 导入