swift - Xcode / 斯威夫特 | 随时了解 UISwitch 是否打开
问题描述
基本上,我们现在得到的是一个按钮,可以根据 TextFields 是否填写来更改其颜色(灰色和绿色)......现在我想添加一个也必须打开的开关才能让按钮颜色变为绿色,否则变为灰色。我究竟如何实现这部分?PS:setupAddTargetIsNotEmptyTextFields() 在 viewDidLoad() 中被调用
func setupAddTargetIsNotEmptyTextFields() {
self.textField_username.addTarget(self, action: #selector(textFieldsIsNotEmpty), for: .editingChanged)
self.textField_eMail.addTarget(self, action: #selector(textFieldsIsNotEmpty),
for: .editingChanged)
self.textField_password.addTarget(self, action: #selector(textFieldsIsNotEmpty), for: .editingChanged)
self.textField_confirmPassword.addTarget(self, action: #selector(textFieldsIsNotEmpty),
for: .editingChanged)
}
@objc func textFieldsIsNotEmpty(sender: UITextField) {
sender.text = sender.text?.trimmingCharacters(in: .whitespaces)
guard
let username = self.textField_username.text, !username.isEmpty,
let eMail = self.textField_eMail.text, !eMail.isEmpty,
let password = self.textField_password.text, !password.isEmpty,
let confirmPassword = self.textField_confirmPassword.text,
password == confirmPassword
else
{
//button is gray
self.button_register.backgroundColor = UIColor(red:0.20, green:0.29, blue:0.37, alpha:1.0)
return
}
//button is green
self.button_register.backgroundColor = UIColor(red:0.10, green:0.74, blue:0.61, alpha:1.0)
}
解决方案
当我只是将开关添加到列表中时,我首先在 textFields 中输入所有内容,然后启用开关。此时按钮仍然是灰色的。然后我必须首先在文本字段中再次更改某些内容以使其正常工作。
听起来正在发生的事情是开关没有设置为textFieldsIsNotEmpty
像文本字段那样触发操作。您可以很容易地解决这个问题:只需将开关配置为也调用该操作:
func setupAddTargetIsNotEmptyTextFields() {
self.textField_username.addTarget(self, action: #selector(textFieldsIsNotEmpty), for: .editingChanged)
// ...yada yada yada...
self.switch_selfDestructEnable.addTarget(self, action: #selector(textFieldsIsNotEmpty), for: .valueChanged)
}
现在,开关将textFieldsIsNotEmpty
在其值更改时发送一个,就像文本字段一样。接下来,修改textFieldsIsNotEmpty()
以检查开关的状态以及各种文本字段的状态,您应该会获得所需的行为。
推荐阅读
- excel - 为每个循环组合多个范围 vba
- kotlin - 可以在没有协程的ViewModel类中调用DAO类的函数吗
- laravel - getCustomAttribute 中的 Laravel 方法返回 cullection null
- javascript - Highcharts Spiderweb 图表 xAxis 标签在长标签名称上消失
- javascript - 无法将引导 JS 加载到 Electron 应用程序中
- javascript - hibext_instdsigdipv2 cookie 来自哪里?
- c++ - 达到限制后自动旋转值的自定义 qt spinbox
- linux - 如果字符串的出现每行恰好一次,如何删除一行?
- embedded-linux - QEMU 网络和 getty 问题
- kubernetes - 如何使用附加到主机的块设备作为 pod 内的块设备