Swift 如何在另一个 UITextField 突出显示或具有值时禁用 TextField
Posted
技术标签:
【中文标题】Swift 如何在另一个 UITextField 突出显示或具有值时禁用 TextField【英文标题】:Swift How to disable a TextField while another UITextField is highlighted or has value 【发布时间】:2020-10-11 21:03:50 【问题描述】:我有三个文本字段:tempTextField、airPressureTextField 和 airDensityTextField。我想在 Textfields 之间创建一个检查以获得以下逻辑: 如果 tempTextField 或 airPressureTextField 在用户尝试输入值或用户输入值并返回时处于焦点位置,我想禁用 airDensityTextField。我试过这段代码。它正确禁用了 airDensityTextField。但是如果我从 tempTextField 或 airPressureTextField 中移除焦点并清空这两个文本字段,airDensityTextField 仍然被禁用。
func textFieldDidEndEditing(_ textField: UITextField)
if let t = tempTextField.text, let ap = airPressureTextField.text
airDensityTextField.isEnabled = false
else
airDensityTextField.isEnabled = true
textFieldDidEndEditing 和 textFieldDidBeginEditing 中的代码我都试过了,结果是一样的。
我怎样才能让它工作?
【问题讨论】:
【参考方案1】:您可以在textFieldDidBeginEditing
中查看正在编辑的文本字段并禁用airDensityTextField
。然后,当他们完成编辑时,除了是否为 nil 之外,您还需要检查文本是否为 ""(空白)。
class TextFieldVC: UIViewController, UITextFieldDelegate
@IBOutlet weak var tempTextField: UITextField!
@IBOutlet weak var airPressureTextField: UITextField!
@IBOutlet weak var airDensityTextField: UITextField!
override func viewDidLoad()
super.viewDidLoad()
tempTextField.delegate = self
airPressureTextField.delegate = self
airDensityTextField.delegate = self
func textFieldDidBeginEditing(_ textField: UITextField)
switch textField
case tempTextField:
airDensityTextField.isEnabled = false
case airPressureTextField:
airDensityTextField.isEnabled = false
default:
break
func textFieldDidEndEditing(_ textField: UITextField)
if
let tempText = tempTextField.text,
let apText = airPressureTextField.text,
tempText != "" || apText != "" /// check if at least one of them has text
airDensityTextField.isEnabled = false
else
airDensityTextField.isEnabled = true
func textFieldShouldReturn(_ textField: UITextField) -> Bool
textField.resignFirstResponder()
return false
【讨论】:
谢谢你的作品。我会接受你的回答。我有一个简单的问题 - 我想通过根据 tempTextField 和 airPressureTextField 提供的值重新计算它的值来更新 airDensityTextField,我应该在 textFieldDidEndEditing 中执行此操作吗? 当然。或者,如果您想实时更新它(当用户输入时),您可以在textField(_:shouldChangeCharactersIn:replacementString:)
中进行
在shouldChangeCharactersIn:replacementString
里面,你可以得到这样的更新文本:let updatedString = (textField.text as NSString?)?.replacingCharacters(in: range, with: string)
以上是关于Swift 如何在另一个 UITextField 突出显示或具有值时禁用 TextField的主要内容,如果未能解决你的问题,请参考以下文章
如果添加了新的 UITextField,如何向下移动许多 UITextField
如何在 Swift 中自动移动到下一个 UITextField
Swift:点击 UITextField 时如何显示 UIPickerView