Το UITextField είναι ένα τυπικό στοιχείο του UIKit για εισαγωγή κειμένου μίας γραμμής στο iOS, που κληρονομεί το UIControl και υποστηρίζει ένα ευρύ φάσμα λειτουργιών πληκτρολογίου. Σύμφωνα με την τεκμηρίωση της Apple Developer (2025), το UITextField παρέχει τον αντιπρόσωπο UITextFieldDelegate με callbacks shouldBeginEditing, shouldChangeCharactersInRange και shouldReturn. Σε αντίθεση με το UITextView, το UITextField περιορίζει την είσοδο σε μία γραμμή και υποστηρίζει secureTextEntry, leftView και rightView για προσαρμοσμένα στοιχεία ελέγχου. Αυτό είναι το κύριο στοιχείο για φόρμες σύνδεσης, αναζήτησης, εγγραφής και εισαγωγής δεδομένων σε εφαρμογές iOS.
Κύρια Σημεία
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 για φόρμες.
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 |
| numberPad | PIN, κωδικός | Μόνο ψηφία 0-9 |
| emailAddress | @ και . στο κύριο επίπεδο | |
| URL | Διεύθυνση ιστού | .com, /, . στο κύριο |
| phonePad | Τηλέφωνο | Ψηφία, +, *, # |
| decimalPad | Τιμή, αριθμός | Ψηφία + υποδιαστολή |
UITextFieldDelegate — είναι ένα πρωτόκολλο που καθορίζει τη συμπεριφορά του πεδίου κειμένου σε διάφορα στάδια εισαγωγής. Κύριες μέθοδοι: textFieldShouldBeginEditing(textField) — επιστρέφει Bool, επιτρέποντας ή απαγορεύοντας την έναρξη επεξεργασίας; textFieldDidBeginEditing — καλείται μετά την εμφάνιση του πληκτρολογίου; textFieldShouldEndEditing — ελέγχει αν μπορεί να ολοκληρωθεί η επεξεργασία (σε false το πεδίο δεν χάνει την εστίαση); textFieldDidEndEditing — καλείται μετά την απόκρυψη του πληκτρολογίου; textFieldShouldChangeCharactersInRange — καλείται σε κάθε εισαγωγή χαρακτήρα, επιτρέπει το φιλτράρισμα εισαγωγής (μόνο ένας χαρακτήρας επιτρέπεται, αν επιστρέψει false — ο χαρακτήρας δεν προστίθεται); textFieldShouldReturn — καλείται κατά το πάτημα Return/Go/Next/Search, χρησιμοποιείται για μετάβαση στο επόμενο πεδίο. Ο αντιπρόσωπος δεν είναι Optional: όλες οι μέθοδοι έχουν προεπιλεγμένη υλοποίηση, αλλά για προσαρμοσμένη συμπεριφορά πρέπει να γίνει override της αντίστοιχης μεθόδου.
Μέθοδος shouldReturn — το τυπικό μοτίβο για πλοήγηση μεταξύ πεδίων φόρμας. Υλοποίηση: textFieldShouldReturn(textField) — ελέγχουμε ποιο textField προκάλεσε το συμβάν και μεταφέρουμε την εστίαση στο επόμενο πεδίο μέσω becomeFirstResponder(). Αν αυτό είναι το τελευταίο πεδίο — καλούμε το resignFirstResponder() για απόκρυψη του πληκτρολογίου. Για αποθήκευση αναφορών σε πεδία χρησιμοποιήστε IBOutlet collection ή ξεχωριστό IBOutlet για κάθε πεδίο.
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.
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 — είναι ένα πρωτόκολλο που καθορίζει την οπτική και συμπεριφορική προσαρμογή του πληκτρολογίου για 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 καθορίζει το κείμενο του κουμπιού στο πληκτρολόγιο: Next — μετάβαση στο επόμενο πεδίο, Done — ολοκλήρωση εισαγωγής, Search — έναρξη αναζήτησης, Send — αποστολή φόρμας, Continue — συνέχιση συμπλήρωσης. Σε συνδυασμό με τη μέθοδο αντιπροσώπου shouldReturn, το returnKeyType επιτρέπει τη δημιουργία φυσικού UX: ο χρήστης συμπληρώνει πεδία, πατώντας Next για μετάβαση στο επόμενο και Done για αποστολή στο τελευταίο πεδίο. Για προσαρμογή του κειμένου κουμπιού χρησιμοποιήστε UIButtonConfiguration σε iOS 15+.
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.
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 πραγματοποιείται μέσω NSPredicate με μορφή "SELF MATCHES %@" και κανονική έκφραση για βασικό έλεγχο μορφής. Ο πραγματικός έλεγχος ύπαρξης email πρέπει να γίνει στον διακομιστή. Για προηγμένη επικύρωση χρησιμοποιήστε τη βιβλιοθήκη SwiftValidators ή Combine publishers. Παράδειγμα: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Το περίγραμμα πεδίου ενημερώνεται μέσω animation block για ομαλή μετάβαση.
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
}
}
Συχνές Ερωτήσεις
Χρησιμοποιήστε τη μέθοδο αντιπροσώπου shouldChangeCharactersInRange. Υπολογίστε το νέο μήκος κειμένου ως existingText.count + newText.count - range.length και επιστρέψτε false αν ξεπεραστεί το όριο. Εναλλακτικά: εγγραφείτε στο συμβάν editingChanged μέσω addTarget και κόψτε το κείμενο μέσω textField.text = String(text.prefix(maxLength)).
Ελέγξτε: isUserInteractionEnabled = true (προεπιλογή), ο αντιπρόσωπος δεν επιστρέφει false στο shouldBeginEditing. Αν το πεδίο βρίσκεται εντός UIScrollView — απενεργοποιήστε το delaysContentTouches. Αν το πεδίο είναι σε modal ελεγκτή — ελέγξτε ότι δεν μπλοκάρει τα αγγίγματα. Για SwiftUI UIViewRepresentable ελέγξτε ότι το πεδίο γίνεται σωστά firstResponder μέσω DispatchQueue.main.async.
Προσθέστε UITapGestureRecognizer στο self.view ή scrollView με target-action που καλεί view.endEditing(true). Εναλλακτικά: textField.resignFirstResponder() για απόκρυψη πληκτρολογίου συγκεκριμένου πεδίου. Ρυθμίστε το touchesBegan σε UIViewController ή χρησιμοποιήστε τη βιβλιοθήκη IQKeyboardManager για αυτόματη διαχείριση πληκτρολογίου. Μην ξεχάσετε να απενεργοποιήσετε το cancelsTouchesInView για σωστή λειτουργία κουμπιών.
Χρώμα κειμένου: textField.textColor = UIColor.label. Γραμματοσειρά: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Χρώμα placeholder: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).
Τρεις τρόποι: isEnabled = false (αλλάζει την εμφάνιση), isUserInteractionEnabled = false (διατηρεί το οπτικό στυλ) ή επιστρέψτε false στο textFieldShouldBeginEditing του αντιπροσώπου. Ο τρίτος τρόπος είναι προτιμότερος — μπλοκάρει την εισαγωγή χωρίς να αλλάζει το οπτικό στυλ. Για προγραμματικό ορισμό κειμένου σε λειτουργία μόνο ανάγνωσης χρησιμοποιήστε τον αντιπρόσωπο.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης