Xcode / Swift |知道 UISwitch 是否随时打开



基本上,我们现在得到的是一个按钮,它根据是否填写了文本字段来更改其颜色(灰色和绿色(。现在我想添加一个开关,也必须打开该开关,让按钮颜色变为绿色,如果没有,则变回灰色。 我究竟如何实现这部分? 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()以检查交换机的状态以及各种文本字段的状态,您应该获得所需的行为。

最新更新