UITextField — τι είναι, ρύθμιση πεδίου εισαγωγής και αρχή λειτουργίας

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-06 Χρόνος ανάγνωσης: 8 λεπ

Το UITextField είναι ένα τυπικό στοιχείο του UIKit για εισαγωγή κειμένου μίας γραμμής στο iOS, που κληρονομεί το UIControl και υποστηρίζει ένα ευρύ φάσμα λειτουργιών πληκτρολογίου. Σύμφωνα με την τεκμηρίωση της Apple Developer (2025), το UITextField παρέχει τον αντιπρόσωπο UITextFieldDelegate με callbacks shouldBeginEditing, shouldChangeCharactersInRange και shouldReturn. Σε αντίθεση με το UITextView, το UITextField περιορίζει την είσοδο σε μία γραμμή και υποστηρίζει secureTextEntry, leftView και rightView για προσαρμοσμένα στοιχεία ελέγχου. Αυτό είναι το κύριο στοιχείο για φόρμες σύνδεσης, αναζήτησης, εγγραφής και εισαγωγής δεδομένων σε εφαρμογές iOS.

Κύρια Σημεία

  • UITextField — πεδίο εισαγωγής κειμένου μίας γραμμής UIKit με υποστήριξη αντιπροσώπου και προσαρμοσμένων πληκτρολογίων
  • UIKeyboardType — 12 τύποι πληκτρολογίου: numberPad, emailAddress, URL, phonePad και άλλα
  • UITextFieldDelegate — διαχείριση κύκλου ζωής εισαγωγής μέσω callbacks shouldBegin/End/Change
  • Secure Text Entry — λειτουργία εισαγωγής κωδικού πρόσβασης με αντικατάσταση χαρακτήρων με τελείες μέσω isSecureTextEntry
  • Left/Right View — προσαρμοσμένα εικονίδια και κουμπιά εντός του πεδίου εισαγωγής για βελτιώσεις UX

Τι είναι το UITextField

UITextField — είναι μια κλάση του πλαισίου UIKit που προορίζεται για εισαγωγή κειμένου μίας γραμμής από τον χρήστη. Η κλάση κληρονομεί το UIControl, επιτρέποντας την εγγραφή σε συμβάντα εισαγωγής μέσω του μηχανισμού target-action: addTarget(self, action: Selector("textChanged:"), for: editingChanged). Το UITextField εμφανίζει περίγραμμα (borderStyle), κείμενο placeholder όταν το πεδίο είναι άδειο, κουμπί εκκαθάρισης (clearButtonMode) και μπορεί να περιέχει αριστερή/δεξιά βοηθητική προβολή. Το πεδίο εμφανίζει/αποκρύπτει αυτόματα το πληκτρολόγιο κατά τη λήψη/απώλεια εστίασης μέσω becomeFirstResponder και resignFirstResponder. Το μέγεθος του πεδίου καθορίζεται από το intrinsicContentSize βάσει της γραμματοσειράς και του στυλ περιγράμματος. Για τη δημιουργία UITextField στο Interface Builder (Storyboard/XIB) χρησιμοποιείται το Object Library, προγραμματιστικά — μέσω του αρχικοποιητή UITextField(frame: CGRect). Η κλάση είναι πλήρως συμβατή με τη σύγχρονη αρχιτεκτονική iOS: Combine publishers, @Published σε SwiftUI μέσω UIViewRepresentable και Diffable Data Source για φόρμες.

Τύποι Πληκτρολογίου UIKeyboardType

UITextField υποστηρίζει 12 τύπους πληκτρολογίου μέσω της ιδιότητας keyboardType. Κάθε τύπος βελτιστοποιεί το σύνολο χαρακτήρων για ένα συγκεκριμένο σενάριο εισαγωγής. UIKeyboardType.default — τυπικό πληκτρολόγιο QWERTY. UIKeyboardType.numberPad — μόνο ψηφία χωρίς επιπλέον χαρακτήρες (ιδανικό για PIN και αριθμούς τηλεφώνου). UIKeyboardType.emailAddress — πληκτρολόγιο με σύμβολο @ και τελεία στο κύριο επίπεδο. UIKeyboardType.URL — πληκτρολόγιο με .com, / και . στο κύριο επίπεδο. UIKeyboardType.phonePad — αριθμητικό πληκτρολόγιο με +, *, # για εισαγωγή αριθμών τηλεφώνου. UIKeyboardType.decimalPad — ψηφία με υποδιαστολή για εισαγωγή τιμών. UIKeyboardType.webSearch — πληκτρολόγιο με κουμπί Go και βελτιστοποίηση για ερωτήματα αναζήτησης. UIKeyboardType.asciiCapable — μόνο χαρακτήρες ASCII για το λατινικό αλφάβητο. Το πληκτρολόγιο εμφανίζεται κατά την κλήση becomeFirstResponder και αποκρύπτεται κατά την resignFirstResponder. Ο τύπος πληκτρολογίου μπορεί να αλλάζει δυναμικά κατά την επεξεργασία.

ΤύποςΣενάριοΧαρακτηριστικά
defaultΓενική εισαγωγή κειμένουΤυπικό QWERTY
numberPadPIN, κωδικόςΜόνο ψηφία 0-9
emailAddressEmail@ και . στο κύριο επίπεδο
URLΔιεύθυνση ιστού.com, /, . στο κύριο
phonePadΤηλέφωνοΨηφία, +, *, #
decimalPadΤιμή, αριθμόςΨηφία + υποδιαστολή

Αντιπρόσωπος UITextFieldDelegate και μέθοδοί του

UITextFieldDelegate — είναι ένα πρωτόκολλο που καθορίζει τη συμπεριφορά του πεδίου κειμένου σε διάφορα στάδια εισαγωγής. Κύριες μέθοδοι: textFieldShouldBeginEditing(textField) — επιστρέφει Bool, επιτρέποντας ή απαγορεύοντας την έναρξη επεξεργασίας; textFieldDidBeginEditing — καλείται μετά την εμφάνιση του πληκτρολογίου; textFieldShouldEndEditing — ελέγχει αν μπορεί να ολοκληρωθεί η επεξεργασία (σε false το πεδίο δεν χάνει την εστίαση); textFieldDidEndEditing — καλείται μετά την απόκρυψη του πληκτρολογίου; textFieldShouldChangeCharactersInRange — καλείται σε κάθε εισαγωγή χαρακτήρα, επιτρέπει το φιλτράρισμα εισαγωγής (μόνο ένας χαρακτήρας επιτρέπεται, αν επιστρέψει false — ο χαρακτήρας δεν προστίθεται); textFieldShouldReturn — καλείται κατά το πάτημα Return/Go/Next/Search, χρησιμοποιείται για μετάβαση στο επόμενο πεδίο. Ο αντιπρόσωπος δεν είναι Optional: όλες οι μέθοδοι έχουν προεπιλεγμένη υλοποίηση, αλλά για προσαρμοσμένη συμπεριφορά πρέπει να γίνει override της αντίστοιχης μεθόδου.

Διαχείριση εστίασης μέσω shouldReturn

Μέθοδος shouldReturn — το τυπικό μοτίβο για πλοήγηση μεταξύ πεδίων φόρμας. Υλοποίηση: textFieldShouldReturn(textField) — ελέγχουμε ποιο textField προκάλεσε το συμβάν και μεταφέρουμε την εστίαση στο επόμενο πεδίο μέσω becomeFirstResponder(). Αν αυτό είναι το τελευταίο πεδίο — καλούμε το resignFirstResponder() για απόκρυψη του πληκτρολογίου. Για αποθήκευση αναφορών σε πεδία χρησιμοποιήστε IBOutlet collection ή ξεχωριστό IBOutlet για κάθε πεδίο.

Secure Text Entry και προσαρμοσμένα left/right view

isSecureTextEntry — ιδιότητα του UITextField που όταν είναι true αντικαθιστά τους εισαγόμενους χαρακτήρες με τελείες (•) και μπλοκάρει την αντιγραφή κειμένου μέσω UIMenuController. Χρησιμοποιείται για πεδία κωδικού πρόσβασης, PIN, CVV. Κατά την εναλλαγή μεταξύ ασφαλούς λειτουργίας και κανονικού κειμένου (show/hide password) ορίστε textField.isSecureTextEntry.toggle(). Σημαντικό: κατά την αλλαγή isSecureTextEntry το κείμενο του πεδίου επαναφέρεται — αποθηκεύστε το εκ των προτέρων. LeftView και RightView — είναι προσαρμοσμένα UIView που εμφανίζονται εντός του πεδίου εισαγωγής αριστερά ή δεξιά. Τυπική χρήση: εικονίδιο αναζήτησης στο leftView, κουμπί "Διαγραφή" στο rightView. Ρύθμιση: textField.leftViewMode = always (πάντα) ή whileEditing (μόνο κατά την επεξεργασία). Τα left/right view τοποθετούνται αυτόματα εντός του πεδίου κειμένου λαμβάνοντας υπόψη το padding. Το μέγεθος του view καθορίζεται από τα bounds ή το Auto Layout.

swift
import UIKit

class LoginViewController: UIViewController {
    let passwordField = UITextField()

    override func viewDidLoad() {
        super.viewDidLoad()
        passwordField.isSecureTextEntry = true
        passwordField.placeholder = "Password"
        passwordField.keyboardType = .asciiCapable
        passwordField.delegate = self

        // Προσαρμοσμένο κουμπί εμφάνισης/απόκρυψης κωδικού
        let showButton = UIButton(type: .system)
        showButton.setTitle("Εμφάνιση", for: .normal)
        showButton.addTarget(self, action: #selector(togglePasswordVisibility),
                       for: .touchUpInside)
        passwordField.rightView = showButton
        passwordField.rightViewMode = .always
    }

    @objc func togglePasswordVisibility() {
        passwordField.isSecureTextEntry.toggle()
    }
}

Ρύθμιση UITextInputTraits

UITextInputTraits — είναι ένα πρωτόκολλο που καθορίζει την οπτική και συμπεριφορική προσαρμογή του πληκτρολογίου για UITextField. Κύριες ιδιότητες: autocorrectionType (.default, .no, .yes) — ενεργοποιεί ή απενεργοποιεί την αυτόματη διόρθωση κειμένου; autocapitalizationType (.none, .words, .sentences, .allCharacters) — αυτόματο Caps Lock για τον πρώτο χαρακτήρα; spellCheckingType — ορθογραφικός έλεγχος; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — κείμενο του κουμπιού Return στο πληκτρολόγιο; enablesReturnKeyAutomatically — αυτόματο μπλοκάρισμα του κουμπιού Return όταν το πεδίο είναι άδειο. Για πεδία εισαγωγής ονόματος χρησιμοποιήστε autocapitalizationType = .words, για email — autocorrectionType = .no, για URL — keyboardType = .URL + autocapitalizationType = .none. Η ρύθμιση traits πραγματοποιείται μετά την αρχικοποίηση του πεδίου πριν από την εμφάνισή του. Η αλλαγή traits ενημερώνει δυναμικά το πληκτρολόγιο στην επόμενη εμφάνιση.

Return Key Type και πλοήγηση στη φόρμα

Return Key Type καθορίζει το κείμενο του κουμπιού στο πληκτρολόγιο: Next — μετάβαση στο επόμενο πεδίο, Done — ολοκλήρωση εισαγωγής, Search — έναρξη αναζήτησης, Send — αποστολή φόρμας, Continue — συνέχιση συμπλήρωσης. Σε συνδυασμό με τη μέθοδο αντιπροσώπου shouldReturn, το returnKeyType επιτρέπει τη δημιουργία φυσικού UX: ο χρήστης συμπληρώνει πεδία, πατώντας Next για μετάβαση στο επόμενο και Done για αποστολή στο τελευταίο πεδίο. Για προσαρμογή του κειμένου κουμπιού χρησιμοποιήστε UIButtonConfiguration σε iOS 15+.

Placeholder, μορφοποίηση και μάσκα εισαγωγής

Placeholder UITextField — είναι το κείμενο που εμφανίζεται με γκρι χρώμα όταν το πεδίο είναι άδειο. Ρύθμιση: textField.placeholder = "Enter email". Για προσαρμογή του χρώματος και της γραμματοσειράς placeholder χρησιμοποιήστε attributedPlaceholder με NSAttributedString. Μάσκα εισαγωγής υλοποιείται μέσω της μεθόδου αντιπροσώπου shouldChangeCharactersInRange — υποστηρίζεται η μορφή αριθμού τηλεφώνου, ημερομηνίας, πιστωτικής κάρτας, SNILS. Η μάσκα εισαγωγής επιτρέπει τον διαχωρισμό εμφάνισης και τιμής: ο χρήστης βλέπει μορφοποιημένο κείμενο (π.χ. +7 (999) 999-99-99), ενώ στο μοντέλο αποθηκεύεται το "79999999999". Παράδειγμα υλοποίησης: αποθηκεύουμε τη μάσκα ως συμβολοσειρά με σύμβολα X για αντικατάσταση; σε κάθε εισαγωγή δημιουργούμε μορφοποιημένη συμβολοσειρά και επιστρέφουμε false στο shouldChangeCharactersInRange, αντικαθιστώντας το κείμενο πεδίου μέσω textField.text = formattedText. Για αριθμούς χρησιμοποιήστε NumberFormatter και decimal keyboardType.

swift
extension LoginViewController: UITextFieldDelegate {
    func textFieldShouldReturn(
        textField: UITextField
    ) -> Bool {
        if textField == emailField {
            passwordField.becomeFirstResponder()
        } else if textField == passwordField {
            textField.resignFirstResponder()
            loginTapped()
        }
        return true
    }

    func textField(
        textField: UITextField,
        shouldChangeCharactersIn range: NSRange,
        replacementString string: String
    ) -> Bool {
        // Αποκλεισμός κενών στο email
        if textField == emailField && string == " " {
            return false
        }
        // Όριο μήκους κωδικού
        if textField == passwordField {
            let newLength = (textField.text?.count ?? 0) +
                string.count - range.length
            return newLength <= 32
        }
        return true
    }
}

Παραδείγματα κώδικα: επικύρωση και φόρμα

Ας εξετάσουμε ένα πλήρες παράδειγμα υλοποίησης φόρμας σύνδεσης με UITextField, επικύρωση email και οπτική ανατροφοδότηση. Η φόρμα περιέχει δύο πεδία: emailField (πληκτρολόγιο emailAddress, χωρίς αυτόματη διόρθωση) και passwordField (secureTextEntry). Η επικύρωση πραγματοποιείται στο shouldChangeCharactersInRange και επιπλέον κατά το πάτημα του κουμπιού Login. Για οπτική ανατροφοδότηση: κόκκινο περίγραμμα (layer.borderColor) σε σφάλμα, πράσινο — σε επιτυχή επικύρωση. Επαναφορά περιγράμματος κατά την έναρξη επεξεργασίας στο textFieldDidBeginEditing.

Επικύρωση email με κανονική έκφραση

Επικύρωση email πραγματοποιείται μέσω NSPredicate με μορφή "SELF MATCHES %@" και κανονική έκφραση για βασικό έλεγχο μορφής. Ο πραγματικός έλεγχος ύπαρξης email πρέπει να γίνει στον διακομιστή. Για προηγμένη επικύρωση χρησιμοποιήστε τη βιβλιοθήκη SwiftValidators ή Combine publishers. Παράδειγμα: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Το περίγραμμα πεδίου ενημερώνεται μέσω animation block για ομαλή μετάβαση.

swift
func validateEmail(textField: UITextField) {
    guard let text = textField.text, !text.isEmpty else {
        textField.layer.borderColor = UIColor.clear.cgColor
        return
    }

    let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.\\p{L}{2,}"
    let predicate = NSPredicate(format: "SELF MATCHES [c] %@", emailRegex)
    let isValid = predicate.evaluate(with: text)

    UIView.animate(withDuration: 0.2) {
        textField.layer.borderColor = isValid
            ? UIColor.systemGreen.cgColor
            : UIColor.systemRed.cgColor
        textField.layer.borderWidth = 1.0
        textField.layer.cornerRadius = 6.0
    }
}

Συχνές Ερωτήσεις

Πώς να περιορίσω τον αριθμό χαρακτήρων στο UITextField;

Χρησιμοποιήστε τη μέθοδο αντιπροσώπου shouldChangeCharactersInRange. Υπολογίστε το νέο μήκος κειμένου ως existingText.count + newText.count - range.length και επιστρέψτε false αν ξεπεραστεί το όριο. Εναλλακτικά: εγγραφείτε στο συμβάν editingChanged μέσω addTarget και κόψτε το κείμενο μέσω textField.text = String(text.prefix(maxLength)).

Γιατί το UITextField δεν αντιδρά στο άγγιγμα;

Ελέγξτε: isUserInteractionEnabled = true (προεπιλογή), ο αντιπρόσωπος δεν επιστρέφει false στο shouldBeginEditing. Αν το πεδίο βρίσκεται εντός UIScrollView — απενεργοποιήστε το delaysContentTouches. Αν το πεδίο είναι σε modal ελεγκτή — ελέγξτε ότι δεν μπλοκάρει τα αγγίγματα. Για SwiftUI UIViewRepresentable ελέγξτε ότι το πεδίο γίνεται σωστά firstResponder μέσω DispatchQueue.main.async.

Πώς να αποκρύψω το πληκτρολόγιο με άγγιγμα εκτός UITextField;

Προσθέστε UITapGestureRecognizer στο self.view ή scrollView με target-action που καλεί view.endEditing(true). Εναλλακτικά: textField.resignFirstResponder() για απόκρυψη πληκτρολογίου συγκεκριμένου πεδίου. Ρυθμίστε το touchesBegan σε UIViewController ή χρησιμοποιήστε τη βιβλιοθήκη IQKeyboardManager για αυτόματη διαχείριση πληκτρολογίου. Μην ξεχάσετε να απενεργοποιήσετε το cancelsTouchesInView για σωστή λειτουργία κουμπιών.

Πώς να αλλάξω το χρώμα κειμένου και τη γραμματοσειρά του UITextField;

Χρώμα κειμένου: textField.textColor = UIColor.label. Γραμματοσειρά: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Χρώμα placeholder: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).

Πώς να κάνω το UITextField μόνο για ανάγνωση;

Τρεις τρόποι: isEnabled = false (αλλάζει την εμφάνιση), isUserInteractionEnabled = false (διατηρεί το οπτικό στυλ) ή επιστρέψτε false στο textFieldShouldBeginEditing του αντιπροσώπου. Ο τρίτος τρόπος είναι προτιμότερος — μπλοκάρει την εισαγωγή χωρίς να αλλάζει το οπτικό στυλ. Για προγραμματικό ορισμό κειμένου σε λειτουργία μόνο ανάγνωσης χρησιμοποιήστε τον αντιπρόσωπο.

Σύνοψη

  • UITextField — πεδίο εισαγωγής κειμένου μίας γραμμής UIKit με κληρονομικότητα UIControl και διαχείριση μέσω αντιπροσώπου
  • UIKeyboardType — 12 τύποι πληκτρολογίου για διαφορετικά σενάρια: email, URL, numberPad, phonePad
  • UITextFieldDelegate — πρωτόκολλο με μεθόδους shouldBegin/End/Change/Return για διαχείριση εισαγωγής
  • Secure Text Entry — λειτουργία κωδικού πρόσβασης μέσω isSecureTextEntry με αντικατάσταση χαρακτήρων με τελείες
  • Left/Right View — προσαρμοσμένα στοιχεία εντός πεδίου (εικονίδια, κουμπιά) με λειτουργίες always/whileEditing
  • Return Key Type — ρύθμιση κουμπιού Return: Next, Done, Search, Send για πλοήγηση φόρμας
  • Επικύρωση — μέσω shouldChangeCharactersInRange με regex και οπτική ανατροφοδότηση μέσω περιγράμματος
  • Το Placeholder ρυθμίζεται μέσω attributedPlaceholder με NSAttributedString για προσαρμοσμένο στυλ

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης