如何检查多个文本字段是否为 nil,并相应地在 Swift 中启用按钮

huangapple go评论88阅读模式
英文:

How to check multiple textfields are nil or not and enable button accordingly in swift

问题

需要在所有文本字段都有文本时才能启用 nextBtn

尝试以下代码:但是使用此代码,当我点击第一个文本字段时,nextBtn 就会启用,为什么呢?如何只在填写完所有文本字段后才启用 nextBtn?请指导我。

  1. override func viewDidLoad() {
  2. super.viewDidLoad()
  3. nextBtn.isEnabled = false
  4. nextBtn.alpha = 0.5
  5. }
  6. func textFieldDidBeginEditing(_ textField: UITextField) {
  7. if fullNameTextField.text == nil{
  8. nextBtn.alpha = 0.5
  9. nextBtn.isEnabled = false
  10. }
  11. else if dateOfBirthTextField.text == nil{
  12. nextBtn.alpha = 0.5
  13. nextBtn.isEnabled = false
  14. }
  15. else if schoolNameTextField.text == nil{
  16. nextBtn.alpha = 0.5
  17. nextBtn.isEnabled = false
  18. }
  19. else if schoolLocationTextField.text == nil{
  20. nextBtn.alpha = 0.5
  21. nextBtn.isEnabled = false
  22. }
  23. else if gradeClassTextField.text == nil{
  24. nextBtn.alpha = 0.5
  25. nextBtn.isEnabled = false
  26. }
  27. else{
  28. nextBtn.alpha = 1
  29. nextBtn.isEnabled = true
  30. }
  31. }

编辑:我尝试了这样做。现在,在第二个文本字段上点击后,nextBtn 变为可用,为什么呢?请指导我。

  1. func textFieldDidBeginEditing(_ textField: UITextField) {
  2. if fullNameTextField.text == "", dateOfBirthTextField.text == "", schoolNameTextField.text == "", gradeClassTextField.text == ""{
  3. nextBtn.alpha = 0.5
  4. nextBtn.isEnabled = false
  5. }
  6. else{
  7. nextBtn.alpha = 1
  8. nextBtn.isEnabled = true
  9. }
  10. }
英文:

I need to enable nextBtn when all textfields has some text only

tried below code: but with this code when i tap on first textfield then my nextBtn becomes enabled why? how to make nextBtn enable after filling the all textfields only. please guide me

  1. override func viewDidLoad() {
  2. super.viewDidLoad()
  3. nextBtn.isEnabled = false
  4. nextBtn.alpha = 0.5
  5. }
  6. func textFieldDidBeginEditing(_ textField: UITextField) {
  7. if fullNameTextField.text == nil{
  8. nextBtn.alpha = 0.5
  9. nextBtn.isEnabled = false
  10. }
  11. else if dateOfBirthTextField.text == nil{
  12. nextBtn.alpha = 0.5
  13. nextBtn.isEnabled = false
  14. }
  15. else if schoolNameTextField.text == nil{
  16. nextBtn.alpha = 0.5
  17. nextBtn.isEnabled = false
  18. }
  19. else if schoolLocationTextField.text == nil{
  20. nextBtn.alpha = 0.5
  21. nextBtn.isEnabled = false
  22. }
  23. else if gradeClassTextField.text == nil{
  24. nextBtn.alpha = 0.5
  25. nextBtn.isEnabled = false
  26. }
  27. else{
  28. nextBtn.alpha = 1
  29. nextBtn.isEnabled = true
  30. }
  31. }

edit: i have tried like this. now after taping on second textfield then nextBtn becomes enable why? please guide me

  1. func textFieldDidBeginEditing(_ textField: UITextField) {
  2. if fullNameTextField.text == "", dateOfBirthTextField.text == "", schoolNameTextField.text == "", gradeClassTextField.text == ""{
  3. nextBtn.alpha = 0.5
  4. nextBtn.isEnabled = false
  5. }
  6. else{
  7. nextBtn.alpha = 1
  8. nextBtn.isEnabled = true
  9. }
  10. }

答案1

得分: 1

你可以通过以下方式简单地完成它:

  1. let fields = [fullNameTextField, dateOfBirthTextField, schoolNameTextField, schoolLocationTextField, gradeClassTextField]
  2. let isValidFields = fields.allSatisfy { field in
  3. !field.text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
  4. }
  5. if isValidFields {
  6. nextBtn.alpha = 1
  7. nextBtn.isEnabled = true
  8. } else {
  9. nextBtn.alpha = 0.5
  10. nextBtn.isEnabled = false
  11. }
英文:

You can simply do it by doing it like this

  1. let fields = [fullNameTextField, dateOfBirthTextField, schoolNameTextField, schoolLocationTextField, gradeClassTextField]
  2. let isVaildFields = fields.allSatisfy { field in
  3. !field.text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
  4. }
  5. if isVaildFields {
  6. nextBtn.alpha = 1
  7. nextBtn.isEnabled = true
  8. } else {
  9. nextBtn.alpha = 0.5
  10. nextBtn.isEnabled = false
  11. }

答案2

得分: 0

以下是翻译好的代码部分:

  1. 一种方法是这样的
  2. class ViewController: UIViewController, UITextFieldDelegate {
  3. @IBOutlet weak var fullNameTextField: UITextField!
  4. @IBOutlet weak var dateOfBirthTextField: UITextField!
  5. @IBOutlet weak var schoolNameTextField: UITextField!
  6. @IBOutlet weak var schoolLocationTextField: UITextField!
  7. @IBOutlet weak var gradeClassTextField: UITextField!
  8. @IBOutlet weak var nextBtn: UIButton!
  9. override func viewDidLoad() {
  10. super.viewDidLoad()
  11. nextBtn.isEnabled = false
  12. nextBtn.alpha = 0.5
  13. }
  14. func textFieldDidBeginEditing(_ textField: UITextField) {
  15. let fields = [fullNameTextField, dateOfBirthTextField, schoolNameTextField,
  16. schoolLocationTextField, gradeClassTextField]
  17. let isValidFields = fields.allSatisfy {
  18. !($0?.text?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ?? true)
  19. }
  20. if isValidFields {
  21. nextBtn.alpha = 1
  22. nextBtn.isEnabled = true
  23. } else {
  24. nextBtn.alpha = 0.5
  25. nextBtn.isEnabled = false
  26. }
  27. }
  28. }
  29. 你也可以通过创建文本字段 `@IBOutlet` 的列表来实现,如下所示:
  30. class ViewController: UIViewController, UITextFieldDelegate {
  31. @IBOutlet var textFields: [UITextField]!
  32. @IBOutlet weak var nextBtn: UIButton!
  33. override func viewDidLoad() {
  34. super.viewDidLoad()
  35. nextBtn.isEnabled = false
  36. nextBtn.alpha = 0.5
  37. }
  38. func textFieldDidBeginEditing(_ textField: UITextField) {
  39. let isValidFields = textFields.allSatisfy {
  40. !($0.text?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ?? true)
  41. }
  42. if isValidFields {
  43. nextBtn.alpha = 1
  44. nextBtn.isEnabled = true
  45. } else {
  46. nextBtn.alpha = 0.5
  47. nextBtn.isEnabled = false
  48. }
  49. }
  50. }
  51. 如果你只想对单独的文本字段进行操作,可以简单地这样做。
  52. class ViewController: UIViewController, UITextFieldDelegate {
  53. @IBOutlet weak var fullNameTextField: UITextField!
  54. @IBOutlet weak var dateOfBirthTextField: UITextField!
  55. @IBOutlet weak var schoolNameTextField: UITextField!
  56. @IBOutlet weak var schoolLocationTextField: UITextField!
  57. @IBOutlet weak var gradeClassTextField: UITextField!
  58. @IBOutlet weak var nextBtn: UIButton!
  59. override func viewDidLoad() {
  60. super.viewDidLoad()
  61. nextBtn.isEnabled = false
  62. nextBtn.alpha = 0.5
  63. }
  64. func isValid(_ textField: UITextField) -> Bool {
  65. return !(textField.text?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ?? true)
  66. }
  67. func textFieldDidBeginEditing(_ textField: UITextField) {
  68. if isValid(fullNameTextField), isValid(dateOfBirthTextField),
  69. isValid(schoolNameTextField), isValid(schoolLocationTextField),
  70. isValid(gradeClassTextField) {
  71. nextBtn.alpha = 1
  72. nextBtn.isEnabled = true
  73. } else {
  74. nextBtn.alpha = 0.5
  75. nextBtn.isEnabled = false
  76. }
  77. }
  78. }
英文:

One way of doing it is like

  1. class ViewController: UIViewController, UITextFieldDelegate {
  2. @IBOutlet weak var fullNameTextField: UITextField!
  3. @IBOutlet weak var dateOfBirthTextField: UITextField!
  4. @IBOutlet weak var schoolNameTextField: UITextField!
  5. @IBOutlet weak var schoolLocationTextField: UITextField!
  6. @IBOutlet weak var gradeClassTextField: UITextField!
  7. @IBOutlet weak var nextBtn: UIButton!
  8. override func viewDidLoad() {
  9. super.viewDidLoad()
  10. nextBtn.isEnabled = false
  11. nextBtn.alpha = 0.5
  12. }
  13. func textFieldDidBeginEditing(_ textField: UITextField) {
  14. let fields = [fullNameTextField, dateOfBirthTextField, schoolNameTextField,
  15. schoolLocationTextField, gradeClassTextField]
  16. let isValidFields = fields.allSatisfy {
  17. !($0?.text?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ?? true)
  18. }
  19. if isValidFields {
  20. nextBtn.alpha = 1
  21. nextBtn.isEnabled = true
  22. } else {
  23. nextBtn.alpha = 0.5
  24. nextBtn.isEnabled = false
  25. }
  26. }
  27. }

You can also do it by creating list of text field @IBOutlet, Like following:

  1. class ViewController: UIViewController, UITextFieldDelegate {
  2. @IBOutlet var textFields: [UITextField]!
  3. @IBOutlet weak var nextBtn: UIButton!
  4. override func viewDidLoad() {
  5. super.viewDidLoad()
  6. nextBtn.isEnabled = false
  7. nextBtn.alpha = 0.5
  8. }
  9. func textFieldDidBeginEditing(_ textField: UITextField) {
  10. let isValidFields = textFields.allSatisfy {
  11. !($0.text?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ?? true)
  12. }
  13. if isValidFields {
  14. nextBtn.alpha = 1
  15. nextBtn.isEnabled = true
  16. } else {
  17. nextBtn.alpha = 0.5
  18. nextBtn.isEnabled = false
  19. }
  20. }
  21. }

And if you only want to do it for individual textfields, you can simply do like this.

  1. class ViewController: UIViewController, UITextFieldDelegate {
  2. @IBOutlet weak var fullNameTextField: UITextField!
  3. @IBOutlet weak var dateOfBirthTextField: UITextField!
  4. @IBOutlet weak var schoolNameTextField: UITextField!
  5. @IBOutlet weak var schoolLocationTextField: UITextField!
  6. @IBOutlet weak var gradeClassTextField: UITextField!
  7. @IBOutlet weak var nextBtn: UIButton!
  8. override func viewDidLoad() {
  9. super.viewDidLoad()
  10. nextBtn.isEnabled = false
  11. nextBtn.alpha = 0.5
  12. }
  13. func isValid(_ textField: UITextField) -> Bool {
  14. return !(textField.text?.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ?? true)
  15. }
  16. func textFieldDidBeginEditing(_ textField: UITextField) {
  17. if isValid(fullNameTextField), isValid(dateOfBirthTextField),
  18. isValid(schoolNameTextField), isValid(schoolLocationTextField),
  19. isValid(gradeClassTextField) {
  20. nextBtn.alpha = 1
  21. nextBtn.isEnabled = true
  22. } else {
  23. nextBtn.alpha = 0.5
  24. nextBtn.isEnabled = false
  25. }
  26. }
  27. }

huangapple
  • 本文由 发表于 2023年6月15日 19:24:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/76481969.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定