Formatter iOS’ta, yapılandırılmamış metni belirtilen bir formata otomatik olarak dönüştüren bir giriş verisi biçimlendirme mekanizmasıdır. Sistem sınıfları NSFormatter ve InputMask, telefon numaraları, kredi kartları, tarihler ve diğer yapılandırılmış verileri işlemeye olanak tanır. Apple Foundation Framework Reference’a (2025) göre, doğru giriş biçimlendirmesi, form doldurma hatalarını %55 oranında azaltır ve veri girişini %30 hızlandırır. Yapılandırılmış giriş beklenen tüm alanlarda biçimlendirici kullanın — bu, kullanıcı deneyimini ve toplanan verilerin kalitesini artırır.
Anahtar Noktalar
Formatter iOS’ta, kullanıcının ham girişini belirli bir kalıba göre yapılandırılmış bir formata dönüştüren bir bileşendir. Formu gönderdikten sonraki basit doğrulamadan farklı olarak, biçimlendirici gerçek zamanlı çalışır ve veri girildikçe görüntülemeyi düzeltir. Temel fark budur: kullanıcı, ayıraçları manuel olarak girmek zorunda kalmadan biçimlendirilmiş sonucu hemen görür.
iOS, birkaç biçimlendirme düzeyi sunar: veri görüntüleme için sistem Foundation biçimlendiricileri (NumberFormatter, DateFormatter, ByteCountFormatter), telefon numaraları için PhoneNumberKit çerçevesi ve özel giriş maskeleri için üçüncü taraf InputMask kütüphaneleri. Düzey seçimi, veri türüne ve gereken biçimlendirme esnekliğine bağlıdır.
Apple Human Interface Guidelines’a göre, giriş biçimlendiricileri üç görevi çözer: kullanıcının bilişsel yükünü azaltmak (ayıraçlar hakkında düşünmeye gerek yok), hata sayısını azaltmak (veriler doğru formatta girilir) ve form doldurmayı hızlandırmak (rakam grupları arasında otomatik geçiş).
Biçimlendiriciler, ekran klavyesiyle girişin fiziksel klavyeye göre daha fazla çaba gerektirdiği mobil cihazlar için özellikle önemlidir. Manuel olarak girilmesi gereken her ek karakter, form doldurma süresini ve hata riskini artırır. Ayıraçların otomatik olarak eklenmesi, tipik formatlar için dokunma sayısını %20–40 oranında azaltır.
iOS’ta giriş biçimlendiricileri üç kategoriye ayrılır: sistem Foundation biçimlendiricileri, uzmanlaşmış Apple biçimlendiricileri (PhoneNumberKit) ve üçüncü taraf kütüphaneler (InputMask, MaskedTextField). Her kategori kendi görevlerini çözer ve uygulama özelliklerine sahiptir.
NumberFormatter sayısal değerleri biçimlendirir: para tutarları, yüzdeler, bilimsel gösterimler. Grup ve ondalık ayıraçlarının yerelleştirilmesini destekler. DateFormatter tarihleri ve saatleri yerelleştirilmiş dizelere dönüştürür. Bu biçimlendiriciler, giriş maskeleme için değil, görüntüleme için tasarlanmıştır, bu nedenle yazma sırasında doğrudan UITextField’a uygulanmaları zordur.
PhoneNumberKit, ulusal standartlara göre telefon numaralarını biçimlendiren bir Apple kütüphanesidir. Koda göre ülkeyi otomatik olarak algılar ve ilgili formatı uygular. Örneğin, bir Rus numarası +7 912 345-67-89, bir Amerikan numarası +1 212-555-0198’den farklı biçimlendirilir. PhoneNumberKit ayrıca numaranın doğruluğunu da doğrular.
Üçüncü taraf kütüphaneler InputMask, herhangi bir format için evrensel bir giriş maskeleme mekanizması sağlar: kart numaraları (0000 0000 0000 0000), tarihler (GG.AA.YYYY), SNILS (000-000-000 00), INN (000000000000). Kütüphaneler, UITextFieldDelegate aracılığıyla çalışır, girişi yakalar ve gerçek zamanlı olarak maskeyi uygular.
| Tür | Çerçeve | Amaç | Mod |
|---|---|---|---|
| Sayılar | NumberFormatter | Para, yüzdeler, bilimsel | Görüntüleme |
| Tarihler | DateFormatter | Tarih, saat, zaman damgası | Görüntüleme |
| Telefonlar | PhoneNumberKit | Ülke standartlarına göre numaralar | Giriş + doğrulama |
| Maskeler | InputMask | Kartlar, kodlar, SNILS, INN | Gerçek zamanlı giriş |
NSFormatter, tüm iOS sistem biçimlendiricilerinin miras aldığı soyut bir Foundation sınıfıdır. İki ana yöntem tanımlar: bir nesneyi dizeye dönüştürmek için string(for:) ve bir diziyi nesneye ters dönüştürmek için getObjectValue(_:for:errorDescription:). Bu çift yönlü mekanizma, hem verileri görüntülemeye hem de metin alanlarından okumaya olanak tanır.
Sistem sınıfları tarafından kapsanmayan belirli formatlar için NSFormatter tabanlı özel bir biçimlendirici oluşturmak mümkündür. Bunun için string(for:) ve getObjectValue(_:for:errorDescription:) yöntemlerini geçersiz kılmak gerekir. Özel bir biçimlendirici, formatter özelliği aracılığıyla UILabel, UITextField ve diğer görünümlerle kullanılabilir.
Apple, özel biçimlendiriciler oluşturmak yerine mevcut Foundation biçimlendiricilerini kullanmayı önerir. NumberFormatter, 32 dili ve bölgesel standardı doğru şekilde işler, DateFormatter farklı kültürlerin takvimlerini dikkate alır ve ByteCountFormatter, değerin boyutuna göre bayt, kilobayt ve megabayt arasında otomatik olarak geçiş yapar.
NSFormatter ayrıca hatalı giriş için hata mesajlarının yerelleştirilmesini destekler. getObjectValue yöntemi, kullanıcıya yerelleştirilmiş biçimde gösterilebilecek bir hata açıklaması döndürür. Bu, özellikle kullanıcının yanlış formatta veri girdiği formlar için önemlidir — hata mesajı anlaşılır ve arayüz dilinde olmalıdır.
Input Mask (giriş maskesi), giriş verilerinin formatını tanımlayan ve yazma sırasında otomatik olarak ayıraçları ekleyen bir şablondur. Maske, yer tutucu karakterlerden (genellikle rakamlar için 0 veya 9, harfler için A) ve otomatik olarak eklenen sabit karakterlerden (parantezler, kısa çizgiler, boşluklar) oluşur. Kullanıcı yalnızca anlamlı karakterleri girer ve ayıraçlar sistem tarafından eklenir.
iOS için en popüler kütüphane RedMadRobot’un InputMask’ıdır. Koşullar, isteğe bağlı bloklar ve ekler (ön ek ve son ek) ile karmaşık maskeleri destekler. Kütüphane bir temsilci aracılığıyla uygulanır ve alt sınıflama olmadan herhangi bir UITextField ile kullanılmasına olanak tanır. Telefon numaraları, banka kartları, tarihler, onay kodları ve diğer yapılandırılmış veriler için maskeler desteklenir.
InputMask formatı kendi sözdizimini kullanır: zorunlu karakterler için köşeli parantezler, isteğe bağlı karakterler için küme parantezleri, parantezlerin dışında sabit karakterler. Örneğin, bir kart numarası maskesi [0000] [0000] [0000] [0000] şeklinde ve bir tarih maskesi [00]{.}[00]{.}[0000] şeklinde görünür. Küme parantezleri içindeki isteğe bağlı bloklar, kullanıcı onlar için veri girmezse kaybolur.
Telefon numaraları için maske genellikle eke ülke kodunu içerir: +7 ([000]) [000]-[00]-[00]. Kullanıcı numaranın yalnızca 10 hanesini girerken, +7, (, ), - karakterleri otomatik olarak eklenir. Bir karakter silindiğinde, maske geri almayı doğru şekilde işleyerek son anlamlı karakteri kaldırır ve önceki konuma döner.
Telefon numarası biçimlendirme, mobil uygulamalarda biçimlendiricilerin en yaygın kullanım durumudur. iOS bu amaçla PhoneNumberKit çerçevesini sağlar ve koda göre ülkeyi otomatik olarak belirleyerek ilgili ulusal formatı uygular. Kütüphane 200’den fazla ülkeyi destekler ve düzenli olarak güncellenir.
PhoneNumberKit iki aşamada çalışır: format algılama ve uygulama. İlk aşamada, kütüphane girilen ülke kodunu (örneğin, +7 Rusya’yı tanımlar) analiz eder ve biçimlendirme kurallarını yükler. İkinci aşamada, ulusal standarda karşılık gelen bir maske uygular: Rusya için +7 XXX XXX-XX-XX, ABD için — +1 XXX-XXX-XXXX, Birleşik Krallık için — +44 XXXX XXX XXX.
Apple Developer Documentation’a göre, iOS 16’dan itibaren UIContentUnavailableConfiguration aracılığıyla yerleşik bir telefon numarası biçimlendirme mekanizması gelmiştir. Ancak, tam gerçek zamanlı biçimlendirme için UITextFieldDelegate aracılığıyla PhoneNumberKit kullanılması önerilir. Kütüphane ayrıca numarayı doğrular: hane sayısını, ülke kodunun geçerliliğini ve ulusal formata uygunluğu kontrol eder.
Uluslararası uygulamalar için, kullanıcının numarayı herhangi bir formatta girebileceğini dikkate almak önemlidir: +7, 8 (Rusya için) veya ülke kodu olmadan. İyi bir biçimlendirici, herhangi bir başlangıç formatını tanımalı ve + ön eki ve ülke koduyla tek bir uluslararası standarda normalleştirmelidir.
Swift’te biçimlendirici uygulaması seçilen yaklaşıma bağlıdır. Sistem Foundation biçimlendiricileri için, iOS 15’ten itibaren UITextField için kullanılabilen formatter özelliği kullanılır. Input Mask için, InputMask kütüphanesiyle UITextFieldDelegate kullanılır. Telefon numaraları için — temsilci aracılığıyla PhoneNumberKit.
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 için iOS 15+ ile UITextField’da formatter özelliği bulunur ve girilen sayıyı yazma sırasında otomatik olarak biçimlendirir. Bu yaklaşım, bir temsilci uygulaması gerektirmez ve kullanıcının yerel ayarlarını dikkate alarak para birimi formatları, yüzdeler ve diğer sayısal veriler için kutudan çıktığı gibi çalışır.
let amountField = UITextField()
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "ru_RU")
amountField.formatter = formatter
RedMadRobot’un InputMask kütüphanesi için kurulum, maske başlatma ve bir temsilci aracılığıyla uygulama yoluyla yapılır. Kütüphane, yapıştırma işlemini, geri alma silmeyi destekler ve metin seçimleriyle doğru şekilde çalışır.
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
}
}
Sıkça Sorulan Sorular
Telefon numaraları için — PhoneNumberKit, genel amaçlı maskeler için — RedMadRobot’un InputMask’ı. Sayılar ve tarihler için sistem NumberFormatter ve DateFormatter yeterlidir.
Evet, UITextView, UITextField ile aynı temsilcileri ve shouldChangeCharactersIn yöntemlerini destekler. Biçimlendirici, UITextViewDelegate uygulanarak uygulanabilir.
Yapıştırma, aynı shouldChangeCharactersIn temsilcisi aracılığıyla işlenir. İyi bir biçimlendirici önce yapıştırılan metindeki tüm ayıraçları kaldırır, ardından temiz verilere maskeyi uygular.
Hayır, e-postanın ayıraçlı sabit bir formatı yoktur. E-posta için textContentType = .emailAddress ve @ sembollü bir klavye ayarlamak yeterlidir.
Modern biçimlendiriciler, karakter başına 1 ms’den daha kısa sürede girişi işler. Gecikme kullanıcı için fark edilmez. InputMask ve PhoneNumberKit kütüphaneleri gerçek zamanlı çalışma için optimize edilmiştir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun