UITextField — nedir, giriş alanı kurulumu ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-07-06 Okuma süresi: 8 dk

UITextField, iOS'ta tek satırlı metin girişi için standart bir UIKit bileşenidir, UIControl'den miras alır ve çok çeşitli klavye modlarını destekler. Apple Developer belgelerine (2025) göre UITextField, shouldBeginEditing, shouldChangeCharactersInRange ve shouldReturn geri çağrılarına sahip UITextFieldDelegate'i sağlar. UITextView'in aksine UITextField, girişi tek bir satırla sınırlar ve özel kontroller için secureTextEntry, leftView ve rightView'i destekler. Bu, iOS uygulamalarında kimlik doğrulama formları, arama, kayıt ve veri girişi için ana öğedir.

Ana Noktalar

  • UITextField — delegate desteği ve özel klavyelerle tek satırlı UIKit giriş alanı
  • UIKeyboardType — 12 klavye türü: numberPad, emailAddress, URL, phonePad ve diğerleri
  • UITextFieldDelegate — shouldBegin/End/Change geri çağrılarıyla giriş yaşam döngüsü yönetimi
  • Secure Text Entry — isSecureTextEntry ile karakterleri noktalarla değiştiren şifre giriş modu
  • Left/Right View — UX iyileştirmeleri için giriş alanı içinde özel simgeler ve düğmeler

UITextField Nedir

UITextField, kullanıcı tarafından tek satırlı metin girişi için tasarlanmış bir UIKit framework sınıfıdır. Sınıf UIControl'den miras alır ve target-action mekanizması aracılığıyla giriş olaylarına abone olmaya izin verir: addTarget(self, action: Selector("textChanged:"), for: editingChanged). UITextField bir kenarlık (borderStyle), alan boşken placeholder metni, bir temizleme düğmesi (clearButtonMode) görüntüler ve sol/sağ yardımcı görünümler içerebilir. Alan, becomeFirstResponder ve resignFirstResponder aracılığıyla odağı kazandığında/kaybettiğinde otomatik olarak klavyeyi gösterir/gizler. Alan boyutu, yazı tipi ve kenarlık stiline bağlı olarak intrinsicContentSize tarafından belirlenir. Interface Builder'da (Storyboard/XIB) UITextField oluşturmak için Object Library'yi kullanın; programatik olarak, başlatıcıyı UITextField(frame: CGRect) kullanın. Sınıf, modern iOS mimarisiyle tamamen uyumludur: Combine publishers, UIViewRepresentable aracılığıyla SwiftUI'de @Published ve formlar için Diffable Data Source.

UIKeyboardType Klavye Türleri

UITextField, keyboardType özelliği aracılığıyla 12 klavye türünü destekler. Her tür, belirli bir giriş senaryosu için karakter kümesini optimize eder. UIKeyboardType.default — standart QWERTY klavye. UIKeyboardType.numberPad — ek semboller olmadan yalnızca rakamlar (PIN kodları ve telefon numaraları için ideal). UIKeyboardType.emailAddress — ana katmanda @ ve nokta bulunan klavye. UIKeyboardType.URL — ana katmanda .com, / ve nokta bulunan klavye. UIKeyboardType.phonePad — telefon numarası girmek için +, *, # ile sayısal tuş takımı. UIKeyboardType.decimalPad — fiyat girmek için ondalık noktalı rakamlar. UIKeyboardType.webSearch — arama sorguları için optimize edilmiş Go düğmeli klavye. UIKeyboardType.asciiCapable — Latin metni için yalnızca ASCII karakterler. becomeFirstResponder çağrıldığında klavye görünür ve resignFirstResponder çağrıldığında gizlenir. Klavye türü düzenleme sırasında dinamik olarak değiştirilebilir.

TürSenaryoÖzellikler
defaultGenel metin girişiStandart QWERTY
numberPadPIN, kodYalnızca 0-9 rakamları
emailAddressE-postaAna katmanda @ ve .
URLWeb adresiAna katmanda .com, /, .
phonePadTelefonRakamlar, +, *, #
decimalPadFiyat, sayıRakamlar + ondalık nokta

UITextFieldDelegate ve Yöntemleri

UITextFieldDelegate, girişin farklı aşamalarında metin alanının davranışını tanımlayan bir protokoldür. Ana yöntemler: textFieldShouldBeginEditing(textField) — düzenlemenin başlamasına izin veren veya reddeden bir Bool döndürür; textFieldDidBeginEditing — klavye göründükten sonra çağrılır; textFieldShouldEndEditing — düzenlemenin tamamlanıp tamamlanamayacağını kontrol eder (false ise alan odağı kaybetmez); textFieldDidEndEditing — klavye gizlendikten sonra çağrılır; textFieldShouldChangeCharactersInRange — her karakter girişinde çağrılır, girişi filtrelemeye izin verir (yalnızca bir karaktere izin verilir, false döndürülürse karakter eklenmez); textFieldShouldReturn — Return/Go/Next/Search tuşuna basıldığında çağrılır, sonraki alana geçmek için kullanılır. Delegate İsteğe Bağlı Değildir: tüm yöntemlerin varsayılan bir uygulaması vardır, ancak özel davranış için ilgili yöntemi geçersiz kılmanız gerekir.

shouldReturn ile Odak Yönetimi

shouldReturn yöntemi, form alanları arasında gezinmek için standart desendir. Uygulama: textFieldShouldReturn(textField) — hangi textField'ın olayı tetiklediğini kontrol edin ve becomeFirstResponder() aracılığıyla odağı sonraki alana taşıyın. Son alan ise, klavyeyi gizlemek için resignFirstResponder() çağrısı yapın. Alan referanslarını depolamak için her alan için IBOutlet koleksiyonu veya ayrı IBOutlet'ler kullanın.

Secure Text Entry ve Özel left/right Görünümler

isSecureTextEntry — true olduğunda girilen karakterleri noktalarla (•) değiştiren ve UIMenuController aracılığıyla metin kopyalamayı engelleyen bir UITextField özelliğidir. Şifre alanları, PIN kodları, CVV için kullanılır. Güvenli mod ile düz metin (show/hide password) arasında geçiş yaparken, textField.isSecureTextEntry.toggle() ayarlayın. Önemli: isSecureTextEntry değiştirildiğinde alan metni sıfırlanır — önceden kaydedin. LeftView ve RightView, giriş alanının içinde sol veya sağda görüntülenen özel UIView'lerdir. Tipik kullanım: leftView'da arama simgesi, rightView'da "Temizle" düğmesi. Yapılandırma: textField.leftViewMode = always (her zaman) veya whileEditing (yalnızca düzenleme sırasında). left/right görünümler, dolgu dikkate alınarak metin alanı içinde otomatik olarak konumlandırılır. Görünüm boyutu bounds veya Auto Layout aracılığıyla ayarlanır.

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

        // Özel şifre göster/gizle düğmesi
        let showButton = UIButton(type: .system)
        showButton.setTitle("Göster", for: .normal)
        showButton.addTarget(self, action: #selector(togglePasswordVisibility),
                       for: .touchUpInside)
        passwordField.rightView = showButton
        passwordField.rightViewMode = .always
    }

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

UITextInputTraits Yapılandırması

UITextInputTraits, UITextField için klavyenin görsel ve davranışsal görünümünü tanımlayan bir protokoldür. Ana özellikler: autocorrectionType (.default, .no, .yes) — metin otomatik düzeltmeyi etkinleştirir veya devre dışı bırakır; autocapitalizationType (.none, .words, .sentences, .allCharacters) — ilk karakter için otomatik büyük harf kilidi; spellCheckingType — yazım denetimi; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — klavyedeki Return düğmesi metni; enablesReturnKeyAutomatically — alan boşken Return düğmesinin otomatik olarak devre dışı bırakılması. Ad giriş alanları için autocapitalizationType = .words, e-posta için autocorrectionType = .no, URL için keyboardType = .URL + autocapitalizationType = .none kullanın. Özellikler, alan görüntülenmeden önce başlatıldıktan sonra yapılandırılır. Özelliklerin dinamik olarak değiştirilmesi, bir sonraki görünümde klavyeyi günceller.

Return Key Type ve Form Gezinme

Return Key Type, klavyedeki düğme metnini tanımlar: Next — sonraki alana geç, Done — girişi tamamla, Search — aramayı başlat, Send — formu gönder, Continue — doldurmaya devam et. shouldReturn delegate yöntemiyle birleştirildiğinde, returnKeyType doğal bir UX sağlar: kullanıcı alanları doldurur, sonrakine geçmek için Next'e ve son alanda göndermek için Done'a basar. Düğme metni özelleştirmesi için iOS 15+'te UIButtonConfiguration kullanın.

Placeholder, Biçimlendirme ve Giriş Maskesi

UITextField Placeholder'ı, alan boşken gri renkte görüntülenen metindir. Yapılandırma: textField.placeholder = "Enter email". Placeholder'ın rengini ve yazı tipini özelleştirmek için NSAttributedString ile attributedPlaceholder kullanın. Giriş maskesi, delegate yöntemi shouldChangeCharactersInRange aracılığıyla uygulanır — telefon numarası, tarih, kredi kartı ve SNILS biçimlerini destekler. Giriş maskesi, görüntüleme ile değeri ayırmaya olanak tanır: kullanıcı biçimlendirilmiş metni (örneğin, +7 (999) 999-99-99) görürken, model "79999999999" depolar. Uygulama örneği: maskeyi değiştirme için X karakterleri içeren bir dize olarak saklayın; her girişte, biçimlendirilmiş dizeyi oluşturun ve shouldChangeCharactersInRange'de false döndürün, textField.text = formattedText aracılığıyla alan metnini değiştirin. Sayılar için NumberFormatter ve decimal keyboardType kullanın.

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 {
        // E-postadaki boşlukları engelle
        if textField == emailField && string == " " {
            return false
        }
        // Şifre uzunluğu sınırı
        if textField == passwordField {
            let newLength = (textField.text?.count ?? 0) +
                string.count - range.length
            return newLength <= 32
        }
        return true
    }
}

Kod Örnekleri: Doğrulama ve Form

UITextField, e-posta doğrulaması ve görsel geri bildirim ile bir giriş formu uygulamasının tam bir örneğine bakalım. Form iki alan içerir: emailField (emailAddress klavye, otomatik düzeltme yok) ve passwordField (secureTextEntry). Doğrulama, shouldChangeCharactersInRange'de ve ek olarak Login düğmesine basıldığında gerçekleştirilir. Görsel geri bildirim için: hata durumunda kırmızı kenarlık (layer.borderColor), başarılı doğrulamada yeşil. textFieldDidBeginEditing'de düzenleme başladığında kenarlığı sıfırlama.

Düzenli İfade ile E-posta Doğrulaması

E-posta doğrulaması, "SELF MATCHES %@" biçimindeki NSPredicate ve temel biçim kontrolü için düzenli bir ifade kullanılarak gerçekleştirilir. Gerçek e-posta varlık kontrolü sunucuda yapılmalıdır. Gelişmiş doğrulama için SwiftValidators kitaplığını veya Combine publishers'ı kullanın. Örnek: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Alan kenarlığı, yumuşak bir geçiş için animasyon bloğu aracılığıyla güncellenir.

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
    }
}

Sıkça Sorulan Sorular

UITextField'de karakter sayısı nasıl sınırlanır?

Delegate yöntemi shouldChangeCharactersInRange'i kullanın. Yeni metin uzunluğunu existingText.count + newText.count - range.length olarak hesaplayın ve sınır aşılırsa false döndürün. Alternatif: addTarget aracılığıyla editingChanged olayına abone olun ve textField.text = String(text.prefix(maxLength)) kullanarak metni kısaltın.

UITextField neden dokunmaya yanıt vermiyor?

Kontrol edin: isUserInteractionEnabled = true (varsayılan), delegate shouldBeginEditing'de false döndürmüyor. Alan bir UIScrollView içindeyse, delaysContentTouches'i devre dışı bırakın. Alan modal bir denetleyicideyse, dokunmaları engellemediğini kontrol edin. SwiftUI UIViewRepresentable için, alanın DispatchQueue.main.async aracılığıyla doğru şekilde firstResponder olduğunu kontrol edin.

UITextField dışına dokunarak klavye nasıl gizlenir?

self.view veya scrollView üzerinde view.endEditing(true) çağıran bir target-action ile UITapGestureRecognizer ekleyin. Alternatif: belirli bir alanın klavyesini gizlemek için textField.resignFirstResponder(). UIViewController'da touchesBegan'ı uygulayın veya otomatik klavye yönetimi için IQKeyboardManager kitaplığını kullanın. Düğmelerin doğru çalışması için cancelsTouchesInView'i devre dışı bırakmayı unutmayın.

UITextField'in metin rengi ve yazı tipi nasıl değiştirilir?

Metin rengi: textField.textColor = UIColor.label. Yazı tipi: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Placeholder rengi: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).

UITextField salt okunur nasıl yapılır?

Üç yol: isEnabled = false (görünümü değiştirir), isUserInteractionEnabled = false (görsel stili korur) veya textFieldShouldBeginEditing delegate'inde false döndürün. Üçüncü yöntem tercih edilir — görsel stili değiştirmeden girişi engeller. Salt okunur modda programatik olarak metin ayarlamak için delegate'i kullanın.

Özet

  • UITextField — UIControl'den miras alan ve delegate yönetimiyle tek satırlı UIKit giriş alanı
  • UIKeyboardType — farklı senaryolar için 12 klavye türü: email, URL, numberPad, phonePad
  • UITextFieldDelegate — giriş yönetimi için shouldBegin/End/Change/Return yöntemlerine sahip protokol
  • Secure Text Entry — isSecureTextEntry ile karakterleri noktalarla değiştiren şifre modu
  • Left/Right View — always/whileEditing modlarıyla alan içinde özel öğeler (simgeler, düğmeler)
  • Return Key Type — form gezinme için Return düğmesi yapılandırması: Next, Done, Search, Send
  • Doğrulama — shouldChangeCharactersInRange ile regex ve kenarlık aracılığıyla görsel geri bildirim
  • Placeholder, özel stil için NSAttributedString ile attributedPlaceholder aracılığıyla yapılandırılır

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.

Projeyi tartış

Ayrıca okuyun