Formatter στο iOS είναι ένας μηχανισμός μορφοποίησης εισερχόμενων δεδομένων που μετατρέπει αυτόματα αδομήωτο κείμενο σε καθορισμένη μορφή. Οι κλάσεις συστήματος NSFormatter και InputMask επιτρέπουν την επεξεργασία αριθμών τηλεφώνου, πιστωτικών καρτών, ημερομηνιών και άλλων δομημένων δεδομένων.
Βασικά σημεία
Formatter στο iOS είναι ένα στοιχείο που μετατρέπει την αδή εισαγωγή χρήστη σε δομημένη μορφή σύμφωνα με ένα καθορισμένο πρότυπο.
Το iOS παρέχει αρκετά επίπεδα μορφοποίησης: μορφοποιητές συστήματος Foundation (NumberFormatter, DateFormatter, ByteCountFormatter) για εμφάνιση δεδομένων, πλαίσιο PhoneNumberKit για αριθμούς τηλεφώνου και βιβλιοθήκες τρίτων μερών InputMask για αυθαίρετες μάσκες εισόδου.
Σύμφωνα με τις Apple Human Interface Guidelines, οι μορφοποιητές εισόδου επιλύουν τρεις εργασίες: μειώνουν το γνωστικό φορτίο, μειώνουν τα σφάλματα και επιταχύνουν τη συμπλήρωση φορμών.
Οι μορφοποιητές είναι ιδιαίτερα σημαντικοί για κινητές συσκευές, όπου η εισαγωγή δεδομένων απαιτεί περισσότερη προσπάθεια.
Μορφοποιητές εισόδου στο iOS χωρίζονται σε τρεις κατηγορίες: μορφοποιητές συστήματος Foundation, εξειδικευμένοι μορφοποιητές Apple (PhoneNumberKit) και βιβλιοθήκες τρίτων μερών (InputMask, MaskedTextField).
NumberFormatter μορφοποιεί αριθμητικές τιμές. DateFormatter μετατρέπει ημερομηνίες και ώρες σε τοπικοποιημένες σειρές.
PhoneNumberKit — βιβλιοθήκη της Apple για μορφοποίηση αριθμών τηλεφώνου σύμφωνα με εθνικά πρότυπα.
Βιβλιοθήκες τρίτων μερών InputMask παρέχουν έναν καθολικό μηχανισμό μάσκας εισόδου: αριθμοί καρτών (0000 0000 0000 0000), ημερομηνίες (ΜΜ.ΗΗ.ΕΕΕΕ).
| Τύπος | Πλαίσιο | Σκοπός | Τρόπος λειτουργίας |
|---|---|---|---|
| Αριθμοί | NumberFormatter | Χρήματα, ποσοστά, επιστημονικά | Εμφάνιση |
| Ημερομηνίες | DateFormatter | Ημερομηνία, ώρα, timestamp | Εμφάνιση |
| Τηλέφωνα | PhoneNumberKit | Αριθμοί κατά πρότυπα χωρών | Εισαγωγή + επικύρωση |
| Μάσκες | InputMask | Κάρτες, κωδικοί | Εισαγωγή σε πραγματικό χρόνο |
NSFormatter — είναι αφηρημένη κλάση Foundation από την οποία κληρονομούν όλοι οι μορφοποιητές συστήματος iOS. Ορίζει δύο κύριες μεθόδους: string(for:) και getObjectValue(_:for:errorDescription:).
Input Mask — ένα πρότυπο που καθορίζει τη μορφή των εισερχόμενων δεδομένων και τοποθετεί αυτόματα τους διαχωριστήρες. Η δημοφιλέστερη βιβλιοθήκη για iOS — InputMask από τη RedMadRobot.
Μορφοποίηση αριθμών τηλεφώνου — το πιο συχνό σενάριο χρήσης μορφοποιητών σε εφαρμογές κινητών. Από το iOS 16, υπάρχει ενσωματωμένος μηχανισμός μέσω UIContentUnavailableConfiguration.
Υλοποίηση μορφοποιητή σε Swift εξαρτάται από την προσέγγιση.
import PhoneNumberKit
class PhoneViewController: UIViewController {
let phoneNumberKit = PhoneNumberKit()
@IBOutlet var phoneField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
phoneField.delegate = self
}
}
extension PhoneViewController: UITextFieldDelegate {
func textField(
_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String
) -> Bool {
guard let text = textField.text else { return true }
let partial = (text as NSString).replacingCharacters(in: range, with: string)
textField.text = partial.applyPhoneMask()
return false
}
}
Για το NumberFormatter από iOS 15+ είναι διαθέσιμη η ιδιότητα formatter στο UITextField.
let amountField = UITextField()
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "ru_RU")
amountField.formatter = formatter
Για τη βιβλιοθήκη InputMask RedMadRobot, η ρύθμιση γίνεται μέσω αρχικοποίησης της μάσκας.
import InputMask
class CardViewController: UIViewController {
@IBOutlet var cardField: UITextField!
var listener: MaskedTextFieldDelegate!
override func viewDidLoad() {
super.viewDidLoad()
listener = MaskedTextFieldDelegate(
primaryMaskFormat: "[0000] [0000] [0000] [0000]"
)
cardField.delegate = listener
}
}
Συχνές Ερωτήσεις
Για αριθμούς τηλεφώνου — PhoneNumberKit, για μάσκες γενικής χρήσης — InputMask από τη RedMadRobot.
Ναι, το UITextView υποστηρίζει τις ίδιες αρμοδιότητες με το UITextField.
Η επικόλληση γίνεται μέσω του ίδιου shouldChangeCharactersIn delegate.
Όχι, το email δεν έχει σταθερή μορφή με διαχωριστήρες.
Οι σύγχρονοι μορφοποιητές επεξεργάζονται την εισαγωγή σε λιγότερο από 1 ms ανά χαρακτήρα.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης