Autocapitalization — είναι ένας μηχανισμός iOS που μετατρέπει αυτόματα το πρώτο γράμμα του εισαγόμενου κειμένου σε κεφαλαίο σε συγκεκριμένα συμφραζόμενα. Το UIKit παρέχει την ιδιότητα autocapitalizationType στο πρωτόκολλο UITextInputTraits με τέσσερις τρόπους: none, words, sentences και allCharacters. Σύμφωνα με το Apple Text Programming Guide (2025), η σωστή ρύθμιση της αυτόματης κεφαλαιοποίησης βελτιώνει την εμπειρία χρήστη και μειώνει τον αριθμό των χειροκίνητων διορθώσεων κατά την πληκτρολόγηση. Χρησιμοποιήστε τον τρόπο sentences για τα περισσότερα πεδία κειμένου και none για ονόματα χρηστών και κωδικούς πρόσβασης.
Κύρια σημεία
Autocapitalization (αυτόματη κεφαλαιοποίηση) — είναι μια λειτουργία του λειτουργικού συστήματος iOS που μετατρέπει αυτόματα τον πρώτο χαρακτήρα κειμένου σε κεφαλαίο όταν συμβαίνουν συγκεκριμένες συνθήκες. Ο μηχανισμός ελέγχεται μέσω της ιδιότητας autocapitalizationType, διαθέσιμης για όλα τα στοιχεία που υλοποιούν το πρωτόκολλο UITextInputTraits: UITextField, UITextView και UISearchBar.
Η λειτουργία λειτουργεί στο επίπεδο της μηχανής κειμένου iOS και ενεργοποιείται τη στιγμή εισαγωγής κάθε χαρακτήρα. Το σύστημα αναλύει τη θέση του δρομέα και το περιβάλλον κείμενο για να καθορίσει αν ο τρέχων εισαγόμενος χαρακτήρας πρέπει να μετατραπεί σε κεφαλαίο. Εάν η συνθήκη ικανοποιηθεί, το iOS αντικαθιστά αυτόματα το πεζό γράμμα με κεφαλαίο προτού εμφανιστεί στο πεδίο.
Σύμφωνα με το Apple Human Interface Guidelines (2025), η αυτόματη κεφαλαιοποίηση αποτελεί μέρος ενός ευρύτερου συστήματος προγνωστικής εισαγωγής που περιλαμβάνει επίσης την αυτόματη διόρθωση και την προγνωστική πληκτρολόγηση. Ο χρήστης μπορεί να απενεργοποιήσει όλες αυτές τις λειτουργίες καθολικά στις ρυθμίσεις συστήματος (Ρυθμίσεις > Γενικά > Πληκτρολόγιο), αλλά ο προγραμματιστής τις διαχειρίζεται επίσης σε επίπεδο συγκεκριμένων πεδίων.
Σε αντίθεση με την αυτόματη διόρθωση, η αυτόματη κεφαλαιοποίηση δεν χρησιμοποιεί γλωσσικό μοντέλο — λειτουργεί με απλούς κανόνες: μετά από τελεία και κενό, στην αρχή του κειμένου, μετά από χαρακτήρα νέας γραμμής. Εξαίρεση αποτελεί ο τρόπος words, όπου το πρώτο γράμμα κάθε λέξης γίνεται κεφαλαίο, ανεξάρτητα από τα συμφραζόμενα.
UITextAutocapitalizationType — είναι μια απαρίθμηση τεσσάρων τιμών που καθορίζουν τη στρατηγική αυτόματης μετατροπής κεφαλαίων. Κάθε τρόπος προορίζεται για συγκεκριμένο τύπο πεδίου κειμένου και επιλύει μια συγκεκριμένη εργασία εμπειρίας χρήστη.
Ο τρόπος .none απενεργοποιεί πλήρως την αυτόματη μετατροπή κεφαλαίων. Όλοι οι χαρακτήρες εισάγονται στο ίδιο πεζό/κεφαλαίο που πληκτρολογεί ο χρήστης. Αυτός ο τρόπος είναι υποχρεωτικός για πεδία κωδικών πρόσβασης, διευθύνσεων email, ψευδωνύμων, ερωτημάτων αναζήτησης και οποιωνδήποτε πεδίων όπου το πεζό/κεφαλαίο έχει σημασία για την επεξεργασία δεδομένων στον διακομιστή.
Ο τρόπος .words κάνει κεφαλαίο το πρώτο γράμμα κάθε εισαγόμενης λέξης. Το σύστημα καθορίζει το όριο λέξης με βάση το κενό και μετατρέπει τον πρώτο χαρακτήρα μετά το κενό σε κεφαλαίο. Ο τρόπος είναι βολικός για πεδία εισαγωγής ονόματος, επωνύμου, ονομάτων πόλεων, οδών και άλλων πεδίων όπου κάθε λέξη πρέπει να ξεκινά με κεφαλαίο.
Ο τρόπος .sentences — ο πιο συνηθισμένος και χρησιμοποιείται από προεπιλογή για τα περισσότερα πεδία κειμένου. Το σύστημα κάνει κεφαλαίο το πρώτο γράμμα μετά από τελεία, θαυμαστικό ή ερωτηματικό που ακολουθείται από κενό. Ο τρόπος είναι ιδανικός για πεδία εισαγωγής σημειώσεων, μηνυμάτων, σχολίων και άλλων πολύγραμμων κειμένων.
Ο τρόπος .allCharacters μετατρέπει όλους τους εισαγόμενους χαρακτήρες σε κεφαλαίους. Αυτός ο τρόπος είναι ισοδύναμος με το συνεχές πάτημα του Caps Lock και χρησιμοποιείται για πεδία όπου τα δεδομένα πρέπει να είναι με κεφαλαία: ταχυδρομικοί κώδικες, κωδικοί χωρών, συντομογραφίες, αριθμοί παραγγελιών. Πρέπει να εφαρμόζεται με προσοχή, καθώς το κείμενο με κεφαλαία είναι δυσκολότερο στην ανάγνωση.
| Τρόπος | Περιγραφή | Παράδειγμα εισαγωγής | Σύσταση |
|---|---|---|---|
| .none | Χωρίς αλλαγές | john@mail.com | Email, κωδικοί, αναζήτηση |
| .words | Κάθε λέξη | Γιώργος Παπαδόπουλος | Όνομα, διεύθυνση, πόλη |
| .sentences | Αρχή πρότασης | Γεια. Πώς είσαι; | Μηνύματα, σημειώσεις |
| .allCharacters | Όλα κεφαλαία | ABC-123 | Κωδικοί, δείκτες |
Ο μηχανισμός αυτόματης κεφαλαιοποίησης ενεργοποιείται στο στάδιο επεξεργασίας του πατήματος πλήκτρου, πριν από την εμφάνιση του χαρακτήρα στην οθόνη. Όταν ο χρήστης πατά ένα πλήκτρο, το UITextInputTraits ελέγχει την τρέχουσα θέση του δρομέα και εφαρμόζει τον κανόνα μετατροπής κεφαλαίων σύμφωνα με το ρυθμισμένο autocapitalizationType.
Για τον τρόπο .sentences το σύστημα παρακολουθεί χαρακτήρες ενεργοποίησης: τελεία (.), θαυμαστικό (!), ερωτηματικό (?), καθώς και τον χαρακτήρα νέας γραμμής ( ) όταν ο τρόπος είναι ενεργοποιημένος. Μετά την ανίχνευση ενός χαρακτήρα ενεργοποίησης και του επόμενου κενού, το σύστημα ορίζει μια σημαία “αναμονή κεφαλαίου” για τον επόμενο εισαγόμενο χαρακτήρα.
Ο τρόπος .words παρακολουθεί τον χαρακτήρα κενού ως ενεργοποιητή. Μετά από κάθε κενό, το σύστημα αναμένει κεφαλαίο γράμμα για την επόμενη λέξη. Υπάρχουν ωστόσο εξαιρέσεις: μετά από παύλα, απόστροφο και άλλα σημεία στίξης μέσα στη λέξη, δεν εισάγεται κεφαλαίο. Για παράδειγμα, “O’Brien” παραμένει σωστό.
Ένα σημαντικό χαρακτηριστικό — η αυτόματη κεφαλαιοποίηση λειτουργεί μόνο για τον πρώτο χαρακτήρα της λέξης. Εάν ο χρήστης εισάγει μια λέξη που περιέχει κεφαλαία στη μέση (για παράδειγμα, iPhone ή macOS), το σύστημα δεν τα αλλάζει, καθώς η μετατροπή εφαρμόζεται μόνο στον πρώτο χαρακτήρα μετά τον ενεργοποιητή. Αυτό σημαίνει ότι ονόματα επωνυμιών και προϊόντων με μη τυπική πεζοκεφαλαία δεν θα καταστραφούν.
Η αυτόματη κεφαλαιοποίηση πρέπει να απενεργοποιείται σε πεδία όπου το πεζό/κεφαλαίο έχει σημασία για τη σωστή επεξεργασία δεδομένων. Κύριες περιπτώσεις: πεδία διευθύνσεων email, ψευδωνύμων και ονομάτων χρηστών, κωδικών πρόσβασης, ερωτημάτων αναζήτησης, διευθύνσεων URL, κωδικών επιβεβαίωσης, IMEI και σειριακών αριθμών. Σε όλες αυτές τις περιπτώσεις, η αυτόματη αλλαγή πεζοκεφαλαίας θα οδηγήσει σε σφάλματα κατά την επεξεργασία στον διακομιστή.
Για γραμμές αναζήτησης (UISearchBar) η αυτόματη κεφαλαιοποίηση είναι απενεργοποιημένη από προεπιλογή, πράγμα που ανταποκρίνεται στις προσδοκίες των χρηστών. Ένα ερώτημα αναζήτησης μπορεί να εισαχθεί με οποιαδήποτε πεζοκεφαλαία και ο διακομιστής συνήθως το μετατρέπει μόνος του σε πεζά. Εάν ενεργοποιήσετε την αυτόματη κεφαλαιοποίηση για αναζήτηση, ο χρήστης θα πρέπει κάθε φορά να διορθώνει χειροκίνητα το κεφαλαίο γράμμα στην αρχή του ερωτήματος.
Σε φόρμες εγγραφής το πεδίο username ή nickname πρέπει να έχει τρόπο .none, καθώς πολλά συστήματα διακρίνουν πεζά και κεφαλαία στα ονόματα χρηστών. Το πεδίο email πρέπει επίσης να είναι χωρίς αυτόματη κεφαλαιοποίηση — αν και τα ονόματα τομέα δεν κάνουν διάκριση πεζών/κεφαλαίων, το τοπικό μέρος του email θεωρητικά μπορεί να κάνει διάκριση, αν και στην πράξη αυτό συμβαίνει σπάνια.
Σύμφωνα με το Apple Developer Documentation, τα πεδία με secureTextEntry (κωδικοί πρόσβασης) κληρονομούν αυτόματα autocapitalizationType = .none, ακόμα κι αν ο προγραμματιστής έχει ορίσει ρητά διαφορετική τιμή. Το σύστημα έχει την υψηλότερη προτεραιότητα για προστατευμένη εισαγωγή και αγνοεί κάθε προσπάθεια ενεργοποίησης της αυτόματης κεφαλαιοποίησης για ένα πεδίο κωδικού πρόσβασης.
Η ρύθμιση της αυτόματης κεφαλαιοποίησης σε Swift γίνεται μέσω της ιδιότητας autocapitalizationType. Η ιδιότητα είναι διαθέσιμη για UITextField, UITextView και UISearchBar. Η τιμή μπορεί να οριστεί τόσο στον κώδικα όσο και μέσω του Interface Builder στον επιθεωρητή χαρακτηριστικών, όπου ο τρόπος ονομάζεται Capitalization.
let nameField = UITextField()
nameField.autocapitalizationType = .words
let emailField = UITextField()
emailField.autocapitalizationType = .none
Για μια φόρμα επικοινωνίας ρυθμίστε κάθε πεδίο σύμφωνα με τη σημασιολογία του: όνομα — .words, email — .none, μήνυμα — .sentences. Αυτός ο συνδυασμός εξασφαλίζει την καλύτερη εμπειρία χρήστη και ελαχιστοποιεί την ανάγκη για χειροκίνητη διόρθωση πεζοκεφαλαίας.
class ContactFormViewController: UIViewController {
@IBOutlet var nameField: UITextField!
@IBOutlet var emailField: UITextField!
@IBOutlet var messageView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
nameField.autocapitalizationType = .words
emailField.autocapitalizationType = .none
messageView.autocapitalizationType = .sentences
}
}
Για προγραμματική αλλαγή του τρόπου κατά τον χρόνο εκτέλεσης, χρησιμοποιήστε τον εκπρόσωπο UITextFieldDelegate. Για παράδειγμα, εάν ένα πεδίο μπορεί να χρησιμοποιηθεί σε διαφορετικά συμφραζόμενα, αλλάξτε το autocapitalizationType στη μέθοδο textFieldDidBeginEditing ανάλογα με την τρέχουσα λειτουργία της φόρμας.
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField === codeField {
textField.autocapitalizationType = .allCharacters
}
}
Η αυτόματη κεφαλαιοποίηση εξαρτάται από τη γλώσσα εισαγωγής που έχει οριστεί στο πληκτρολόγιο του χρήστη. Για διαφορετικές γλώσσες, οι κανόνες μετατροπής πεζοκεφαλαίας μπορεί να διαφέρουν. Για παράδειγμα, στην τουρκική γλώσσα το γράμμα “i” σε κεφαλαίο γίνεται “İ” (με τελεία), και το “I” σε πεζό γίνεται “ı” (χωρίς τελεία). Το iOS λαμβάνει αυτόματα υπόψη αυτά τα χαρακτηριστικά.
Για τη ρωσική γλώσσα η αυτόματη κεφαλαιοποίηση λειτουργεί με τους ίδιους κανόνες όπως και για τα αγγλικά: κεφαλαίο μετά από τελεία, στην αρχή της πρότασης και μετά από νέα γραμμή. Προβλήματα μπορεί να προκύψουν με το γράμμα “jo” — αν και υπάρχει στο λεξικό του συστήματος, δεν το εμφανίζουν όλες οι διατάξεις πληκτρολογίου στο κύριο επίπεδο, και η αυτόματη κεφαλαιοποίηση το μετατρέπει σωστά σε κεφαλαίο.
Για τις κινεζικές, ιαπωνικές και κορεατικές γλώσσες η αυτόματη κεφαλαιοποίηση δεν εφαρμόζεται, καθώς σε αυτές τις γλώσσες δεν υπάρχει η έννοια του πεζού/κεφαλαίου. Ο τρόπος autocapitalizationType αγνοείται από το σύστημα κατά τη χρήση των αντίστοιχων πληκτρολογίων και το πεδίο συμπεριφέρεται όπως στον τρόπο .none, ανεξάρτητα από την ορισμένη τιμή.
Για την αραβική γλώσσα και τα εβραϊκά, η αυτόματη κεφαλαιοποίηση επίσης δεν εφαρμόζεται, καθώς αυτές οι γλώσσες χρησιμοποιούν το δικό τους σύστημα γραφής χωρίς διαχωρισμό σε πεζά και κεφαλαία. Το σύστημα iOS καθορίζει σωστά τη γλώσσα εισαγωγής και αγνοεί τις ρυθμίσεις αυτόματης κεφαλαιοποίησης για γλώσσες όπου αυτή η έννοια δεν υπάρχει.
Συχνές ερωτήσεις
Ναι, η ιδιότητα autocapitalizationType μπορεί να αλλάξει ανά πάσα στιγμή, ακόμα και όταν το πεδίο είναι ήδη ενεργό. Η αλλαγή θα τεθεί σε ισχύ κατά την επόμενη εισαγωγή χαρακτήρα.
Ναι, για πεδία με isSecureTextEntry = true το σύστημα ορίζει αυτόματα autocapitalizationType = .none. Η αλλαγή αυτής της συμπεριφοράς προγραμματικά δεν είναι δυνατή.
Ναι, το UITextView υποστηρίζει πλήρως το autocapitalizationType. Αυτό είναι ιδιαίτερα χρήσιμο για πολύγραμμα πεδία, όπου ο τρόπος .sentences λειτουργεί πιο φυσικά.
Εάν ένα πεδίο δεν έχει επισημανθεί ως secureTextEntry αλλά χρησιμοποιείται για εισαγωγή κωδικού πρόσβασης, η αυτόματη κεφαλαιοποίηση μπορεί να αλλάξει τον κωδικό. Πάντα να την απενεργοποιείτε σε πεδία όπου η πεζοκεφαλαία έχει σημασία.
Στον προσομοιωτή η αυτόματη κεφαλαιοποίηση λειτουργεί μέσω του φυσικού πληκτρολογίου Mac και μπορεί να συμπεριφέρεται διαφορετικά. Δοκιμάστε σε πραγματική συσκευή για σωστή συμπεριφορά.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης