gpt4 book ai didi

ios - 禁用带有 textFieldDidBeginEditing 的 UIButton 需要单击 UITextField 才能生效

转载 作者:可可西里 更新时间:2023-11-01 02:27:46 27 4
gpt4 key购买 nike

使用 UITextFieldDelegate,我根据 3 个 UITextFields 是否包含信息来禁用我的 UIButton“btnSignup”。目前,它的工作正常减去 UIButton react 的事实(再次运行 if 语句),我必须点击 UITextField。当我输入内容并返回删除它时也是如此。 UIButton 保持事件状态,直到我点击 UITextField(如果我点击提交而不点击其他地方,我可以提交,但事实并非如此。)

class MainVC: UIViewController, UITextFieldDelegate {

@IBOutlet var receiveName: UITextField!
@IBOutlet var receiveEmail: UITextField!
@IBOutlet var receivePhone: UITextField!
@IBOutlet var btnSignup: UIButton!

override func viewDidLoad() {
super.viewDidLoad()

self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3

self.receiveName.delegate = self
self.receiveEmail.delegate = self
self.receivePhone.delegate = self

func textFieldDidBeginEditing(textField: UITextField) {

if countElements(receiveName.text) > 0 && countElements(receiveEmail.text) > 0 && countElements(receivePhone.text) > 0 {
self.btnSignup.enabled = true
self.btnSignup.alpha = 1
} else {
self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3
}
}
}

我正在寻找一种能够提供更实时效果的解决方案。如果 UITextField 在任何时候被编辑,该函数应该监听和响应。

最佳答案

使用与您的代码接近的东西,我可以按如下方式执行此操作。我添加了 3 个级别。用于记录文本字段是否输入了内容的变量。我在文本字段中添加了标签。我更改了 UITextFieldDelegate 类 func 并测试了所有三个字段都有文本。当您在第三个字段中输入一个字段时,按钮会亮起!

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
var receiveNameBool = false
var receiveEmailBool = false
var receivePhoneBool = false

@IBOutlet var receiveName: UITextField!
@IBOutlet var receiveEmail: UITextField!
@IBOutlet var receivePhone: UITextField!
@IBOutlet var btnSignup: UIButton!

override func viewDidLoad() {
super.viewDidLoad()

self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3

self.receiveName.delegate = self
self.receiveEmail.delegate = self
self.receivePhone.delegate = self

}

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {

if textField.tag == 1 {
receiveNameBool = true
} else if textField.tag == 2 {
receiveEmailBool = true
} else if textField.tag == 3 {
receivePhoneBool = true
}

if receiveNameBool && receiveEmailBool && receivePhoneBool {
self.btnSignup.enabled = true
self.btnSignup.alpha = 1
} else {
self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3
}
return true
}
}

好的,在第二个版本中,我使用了您使用的 textFieldDidBeginEditing 函数。在这种情况下,您在第三个字段中单击的第二个按钮已启用。在这两个示例中,如果用户删除了他们输入的数据,您仍然需要编写代码来处理这种情况。但是上面的第一个示例可以满足您的需求。

导入 UIKit

class ViewController: UIViewController, UITextFieldDelegate {
var receiveNameBool = false
var receiveEmailBool = false
var receivePhoneBool = false

@IBOutlet var receiveName: UITextField!
@IBOutlet var receiveEmail: UITextField!
@IBOutlet var receivePhone: UITextField!
@IBOutlet var btnSignup: UIButton!

override func viewDidLoad() {
super.viewDidLoad()

self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3

self.receiveName.delegate = self
self.receiveEmail.delegate = self
self.receivePhone.delegate = self

}

func textFieldDidBeginEditing(textField: UITextField) {

if textField.tag == 1 {
receiveNameBool = true
} else if textField.tag == 2 {
receiveEmailBool = true
} else if textField.tag == 3 {
receivePhoneBool = true
}

if receiveNameBool && receiveEmailBool && receivePhoneBool {
self.btnSignup.enabled = true
self.btnSignup.alpha = 1
} else {
self.btnSignup.enabled = false
self.btnSignup.alpha = 0.3
}
}
}

关于ios - 禁用带有 textFieldDidBeginEditing 的 UIButton 需要单击 UITextField 才能生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985169/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com