UITextField должен содержать минимум символов для активации UIButton - PullRequest
0 голосов
/ 23 декабря 2018

`Я новичок в Xcode / Swift и не могу понять, как заставить UITextField требовать минимальное количество символов (например, 7), прежде чем UIButton станет активным (например, Next).

Если пользователь не вводит как минимум 7 символов в поле UITextField (например, поле пароля), кнопка UIB (например, «Далее») остается неактивной.Однако, когда пользователь вводит 7 или более символов в UITextField, кнопка UIB активируется и работает как обычно (переходит к следующему экрану).

Ниже приведен мой код View Controller.UITextField, о котором идет речь, - «passwordField», а UIB-кнопка - «toViewController3»:

import UIKit

class ViewController2: UIViewController, UITextFieldDelegate {

@IBOutlet weak var passwordField: UITextField!

@IBAction func toViewController3(_ sender: Any) {
    print("button pressed")
    self.performSegue(withIdentifier: "ViewController2ToViewController3Segue", sender: self)
}

@IBAction func backToViewController1(_ sender: Any) {
    print("back button pressed")
    self.performSegue(withIdentifier: "ViewController2ToViewController1Segue", sender: self)

}

override func viewDidLoad() {
    super.viewDidLoad()
    print("ViewController2 has loaded")

    passwordField.delegate = self
    passwordField.becomeFirstResponder()

}

// Hide Keyboard when touch on screen
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
    print("Keyboard Hidden by Screen Tap")
}

// Hide keyboard when Return key is pressed
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    passwordField.resignFirstResponder()
    print("Keyboard Hidden by Return Key")
    return true
}

}

}

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Сначала вам нужна ссылка для кнопки (установите состояние кнопки по умолчанию как отключено )

@IBOutlet weak var someButton: UIButton!

Использование цели для .editingChanged

Первое действие создания, которое получаетвызывается, когда пользователь вводит или удаляет символ из TextField.Если в TextField text есть хотя бы 7 символов, включите кнопку, если нет, отключите ее

@IBAction func textFieldChangedValue(_ sender: UITextField) {
    someButton.isEnabled = sender.text!.count >= 7
}

, а затем просто добавьте цель в свой TextField для события .editingChanged (вам не нужно делать это программно)

textField.addTarget(self, action: #selector(textFieldChangedValue(_:)), for: .editingChanged)

Использование метода делегата shouldChangeCharactersIn

Использование shouldChangeCharactersIn Метод делегата TextField, который вызывается при вводе или удалении пользователем любого символа

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textField == passwordField {
        let countAfter = textField.text!.count + string.count - range.length
        someButton.isEnabled = countAfter >= 7
    }
    return true
}
0 голосов
/ 23 декабря 2018
let text = UITextField()
text.addTarget(self, action: #selector(textFieldChanged(_:)), for: .valueChanged)

@objc func textFieldChanged(_ textField: UITextField) {
    if textField.text?.count > 7 {
        // active button
    } else {
        // disable button
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...