First Responder: nedir, amacı ve girdi nesnesi

Yazar: IT Sectr Yayınlanma: 2026-07-09 Okuma süresi: 9 dk

First Responder, iOS'ta dokunma olaylarını, tuş basımlarını, sallama hareketlerini ve menü komutlarını ilk alan UIResponder nesnesidir. Herhangi bir anda, uygulamada yalnızca bir nesne first responder olabilir. Atama, otomatik olarak (bir UITextField odak aldığında) veya programatik olarak becomeFirstResponder metodu aracılığıyla gerçekleşir. Apple Developer Documentation (2026)'ya göre, bir nesne yalnızca canBecomeFirstResponder metodu true döndürürse first responder olabilir, bu da bu mekanizmayı açık ve kontrol edilebilir hale getirir.

Önemli Noktalar

  • First Responder, girdi olaylarının ana alıcısıdır, otomatik olarak veya becomeFirstResponder aracılığıyla atanır.
  • Yalnızca bir nesne belirli bir anda first responder olabilir.
  • canBecomeFirstResponder, bir nesnenin first responder olabilmesi için true döndürmelidir.
  • ResignFirstResponder, first responder durumunu kaldırır ve UITextField için klavyeyi gizler.
  • UITextField ve UITextView, kullanıcıdan odak aldıklarında first responder olurlar.

First Responder Nedir

First Responder, bir iOS uygulamasında şu anda girdi olaylarını alan UIResponder nesnesidir. Sistem tüm dokunma olaylarını, tuş basımlarını, hareket olaylarını (cihazı sallama) ve eylem mesajlarını (örneğin, bir bağlam menüsünü çağırma) bu nesneye yönlendirir.

First responder kavramı, Responder Chain'in ilk halkasıdır. First responder alınan bir olayı işlemezse, olay otomatik olarak zincirdeki bir sonraki nesneye iletilir. Bu, bir olayın kaybolmamasını, hiyerarşideki tüm potansiyel işleyicilere sırayla sunulmasını sağlar.

Apple'a göre, first responder durumu UIResponder ve onun canBecomeFirstResponder ile becomeFirstResponder metotlarıyla yakından ilişkilidir. Varsayılan olarak, UIView yalnızca belirli alt sınıflar için true döndürür — UITextField, UITextView, UISearchBar. Basit UIView dahil diğer görünümler false döndürerek yanlışlıkla atamayı önler.

First Responder Nasıl Atanır

Atama iki şekilde gerçekleşebilir: otomatik olarak, kullanıcı bir UITextField'a dokunduğunda (sistem dahili olarak becomeFirstResponder'ı çağırır) veya programatik olarak, geliştirici herhangi bir UIResponder nesnesinde becomeFirstResponder metodu açıkça çağırdığında.

Atamadan önce, iOS canBecomeFirstResponder'ı kontrol eder. Metot false döndürürse, becomeFirstResponder çağrısı görmezden gelinir ve nesne first responder olmaz. Bu, olayları işlemeye hazır olmayan nesnelerin (örneğin, gizli veya devre dışı bırakılmış arayüz öğeleri) atanmasını önleyen koruyucu bir mekanizmadır.

swift
class CustomTextField: UITextField {
    override var canBecomeFirstResponder: Bool {
        return super.canBecomeFirstResponder
    }
}

// Programatik atama
textField.becomeFirstResponder()

// First responder olup olmadığını kontrol et
if textField.isFirstResponder {
    print("TextField artık first responder")
}

Yeni bir first responder atandığında, iOS otomatik olarak önceki nesnede resignFirstResponder'ı çağırır. Bu, sistemde her zaman yalnızca bir nesnenin first responder durumunda olmasını garanti eder. Yeni nesne first responder olamazsa (canBecomeFirstResponder = false), eski nesne durumunu korur.

First Responder ve Klavye

iOS klavyesi, first responder mekanizması sayesinde ekranda görünür. Bir UITextField veya UITextView first responder olduğunda, sistem otomatik olarak o alanın mevcut keyboardType'ıyla ilişkili klavyeyi görüntüler. First responder resign yaptığında klavye gizlenir.

Bu davranış, iOS'ta önemli bir UX mekanizmasıdır: kullanıcı bir giriş alanına dokunur — klavye görünür; Geri Dön tuşuna basar veya başka bir alana dokunur — klavye değişir veya gizlenir. Geliştirici, UIResponder metotlarının yanı sıra inputView ve inputAccessoryView aracılığıyla standart klavyeyi özel bir klavyeyle değiştirerek bunu kontrol edebilir.

Input Accessory View, klavyenin üzerinde first responder'a da bağlı olan ek bir paneldir. Örneğin, giriş alanları arasında gezinmek için Sonraki, Önceki, Bitti düğmelerine sahip bir panel. Klavyeyle birlikte görünür ve kaybolur, first responder durumuyla senkronize olur.

OlayFirst Responder DurumuKlavye
UITextField'a dokunmaFirst responder olurGörünür
Return tuşuna basmaKalır veya resign yaparKalır veya gizlenir
Başka alana dokunmaYeni alana geçerDeğişir
resignFirstResponder çağırmaKaldırılırGizlenir
Uygulama gizlenirOtomatik resign yaparGizlenir

Resign First Responder

ResignFirstResponder, bir nesneden first responder durumunu kaldıran UIResponder metodudur. Çağrıdan sonra, nesne girdi olaylarını almayı durdurur ve klavye (aktifse) gizlenir. Metot bir Bool döndürür — resign başarılıysa true.

Geliştiriciler genellikle Bitti düğmesine basılması, ekranın boş bir alanına dokunulması (view.endEditing) veya ekrandan çıkılması yanıtında resignFirstResponder'ı çağırır. view.endEditing(true), tüm alt metin alanları için aynı anda resign yapmanın kullanışlı bir yoludur: görünüm hiyerarşisinin tamamını dolaşır ve mevcut first responder'da resignFirstResponder'ı çağırır.

swift
// Bitti düğmesine basınca resign
@objc func doneButtonTapped() {
    textField.resignFirstResponder()
}

// Boş alana dokununca resign
override func touchesBegan(
    _ touches: Set<UITouch>,
    with event: UIEvent?
) {
    view.endEditing(true)
}

// Tüm form alanları için resign
func validateAndSubmit() {
    view.endEditing(true)
    // Form gönderme mantığı
}

resignFirstResponder'ın false döndürdüğü durumlar vardır. Bu, nesne metodu geçersiz kıldıysa ve durumun kaldırılmasını açıkça engellediyse olur. Örneğin, doğrulama sürecindeki bir metin alanı, veri kaybını önlemek için resign'i geçici olarak engelleyebilir. Bu gibi durumlarda, doğrulamanın tamamlanmasını bekleyin ve ardından zorla resign yapın.

First Responder Kontrolü ve İzleme

UIResponder, isFirstResponder özelliğini (salt okunur) sağlar; bu özellik, belirtilen nesne şu anda first responder ise true döndürür. Bu, koşullu mantık için kullanışlıdır — örneğin, bir metin alanı odaklanmışsa ve kullanıcı veri giriyorsa bir eylemi gerçekleştirmekten kaçınmak için.

iOS, uygulama çapında geçerli first responder'ı almak için yerleşik bir API sağlamaz. Geliştiriciler, UIResponder metodunu kullanarak görünüm hiyerarşisini dolaşarak bunu başarır. Apple, KVO veya delegeler aracılığıyla güncellenebilen first responder'a zayıf bir referans (weak reference) önerir.

swift
// First responder bulma uzantısı
extension UIView {
    var firstResponder: UIResponder? {
        guard isFirstResponder else {
            return subviews.compactMap { $0.firstResponder }.first
        }
        return self
    }
}

// Kullanım
if let current = view.firstResponder {
    print("Current first responder: \(current)")
}

Değişiklikleri izlemek için UIResponder.keyboardWillShowNotification ve UIResponder.keyboardWillHideNotification'a abone olabilirsiniz — bunlar, bir metin nesnesinin first responder olduğunu veya olmaktan çıktığını dolaylı olarak belirtir. Ancak, isFirstResponder değişiklikleri için doğrudan bir abonelik yoktur; bunun yerine KVO veya özel delegeler kullanılır.

First Responder ve Özel Görünümler

Özel görünümler, canBecomeFirstResponder'ı geçersiz kılarak ve true döndürerek first responder olabilir. Bu, klavye veya fiziksel düğme olaylarını alması gereken bileşenler için gereklidir — örneğin, özel oyun kumandaları veya UITextView tabanlı kod düzenleyicileri.

Özel bir first responder oluştururken erişilebilirliği göz önünde bulundurmak önemlidir: VoiceOver ve Switch Control, gezinme için doğru first responder atamasına güvenir. Özel bir görünüm first responder olursa, UIAccessibility protokolünü doğru şekilde uygulamalı ve yardımcı teknolojilere durumunu bildirmelidir.

Özel girdi için (örneğin, bir barkod tarayıcı veya dijital tuş takımı), inputView özelliğini geçersiz kılın — bu görünüm first responder olduğunda standart klavye yerine görüntülenecek özel bir UIView döndürün. Benzer şekilde, inputAccessoryView klavyenin üzerine bir panel ekler.

Sıkça Sorulan Sorular

iOS'ta First Responder nedir?

First Responder, şu anda girdi olaylarını (dokunma, tuşlar, ivmeölçer) alan UIResponder nesnesidir. becomeFirstResponder aracılığıyla atanır ve canBecomeFirstResponder'dan true döndürmelidir. Bir uygulamada yalnızca bir nesne first responder olabilir.

Dokunmadan UITextField nasıl first responder yapılır?

textField.becomeFirstResponder() öğesini programatik olarak çağırın, örneğin viewDidAppear içinde. textField'ın gizli olmadığından, userInteractionEnabled = true ve isEnabled = true olduğundan emin olun. Alan bir UITableView veya UICollectionView içindeyse, hücrenin ekranda görünür olduğundan emin olun.

Metin alanının dışına dokunarak klavye nasıl gizlenir?

Ana görünüme bir UITapGestureRecognizer ekleyin ve işleyicisinde view.endEditing(true) çağırın. Bu, geçerli first responder'ı otomatik olarak bulur ve resignFirstResponder'ı çağırır. Alternatif olarak, UIViewController'da touchesBegan'ı endEditing çağrısıyla geçersiz kılın.

becomeFirstResponder neden false döndürüyor?

becomeFirstResponder, canBecomeFirstResponder false döndürürse, görünüm gizliyse, pencere hiyerarşisinde değilse veya userInteractionEnabled = false ise false döndürür. Ayrıca görünümün pencereye eklendiğini kontrol edin — ekranda olmayan bir görünüm becomeFirstResponder'a yanıt vermez.

Hangi nesnenin şu anda first responder olduğu nasıl belirlenir?

iOS bunun için küresel bir API sağlamaz. Her alt görünümde isFirstResponder'ı kontrol eden bir UIView uzantısı aracılığıyla görünüm hiyerarşisinin yinelemeli olarak taranmasını kullanın. Bir alternatif, AppDelegate'de son first responder'a zayıf bir referans depolamak ve UITextField delegeleri aracılığıyla güncellemektir.

Özet

  • First Responder, iOS'ta girdi olaylarını alan tek UIResponder nesnesidir. Responder Chain'in ilk halkasıdır.
  • becomeFirstResponder nesneyi first responder olarak atar, ancak yalnızca canBecomeFirstResponder true döndürürse — bu, sistemin açık bir koruma mekanizmasıdır.
  • resignFirstResponder first responder durumunu kaldırır; metin alanları için bu klavyeyi otomatik olarak gizler.
  • UITextField ve UITextView odaklandıklarında first responder olur ve başka bir alanda becomeFirstResponder aracılığıyla programatik olarak değiştirilebilir.
  • view.endEditing(true), görünüm hiyerarşisindeki tüm alt yanıtlayıcı nesneleri resign etmenin kullanışlı bir yoludur.
  • Özel görünümler, belirli girdi senaryoları için canBecomeFirstResponder'ı geçersiz kılarak first responder olabilir.
  • First responder izleme, yinelemeli alt görünüm taraması veya dolaylı olarak klavye bildirimleri aracılığıyla uygulanı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