First Responder: bu nədir, məqsədi və giriş obyekti

Müəllif: IT Sectr Dərc olunub: 2026-07-09 Oxuma vaxtı: 9 dəq

First Responder — iOS-da UIResponder obyektidir, ilk olaraq toxunma hadisələrini, düymə basmalarını, silkələmə jestlərini və menyu əmrlərini qəbul edir. Hər an tətbiqdə yalnız bir obyekt first responder ola bilər. Təyinat avtomatik (UITextField fokusunda) və ya proqram olaraq becomeFirstResponder metodu vasitəsilə baş verir. Apple Developer Documentation (2026)-ya görə, obyekt yalnız canBecomeFirstResponder metodu true qaytararsa first responder ola bilər, bu da mexanizmi açıq və idarəolunan edir.

Əsas məqamlar

  • First Responder — giriş hadisələrinin əsas qəbuledicisi, avtomatik və ya becomeFirstResponder vasitəsilə təyin olunur.
  • Yalnız bir obyekt tətbiqdə müəyyən bir anda first responder ola bilər.
  • canBecomeFirstResponder obyektin first responder ola bilməsi üçün true qaytarmalıdır.
  • ResignFirstResponder first responder statusunu ləğv edir və UITextField üçün klaviaturanı gizlədir.
  • UITextField və UITextView istifadəçidən fokus aldıqda first responder olurlar.

First Responder nədir

First Responder — iOS tətbiqində hazırda giriş hadisələrini qəbul edən UIResponder obyektidir. Sistem bütün toxunma hadisələrini, düymə basmalarını, hərəkət hadisələrini (cihazı silkələmə) və aksiya mesajlarını (məsələn, kontekst menyusunun çağırılması) məhz bu obyektə yönləndirir.

First responder konsepsiyası Responder Chain-in ilk halqasıdır. Əgər first responder alınan hadisəni emal etmirsə, o avtomatik olaraq zəncirdəki növbəti obyektə ötürülür. Bu, hadisənin itirilməyəcəyinə, ardıcıl olaraq iyerarxiyadakı bütün potensial emalçılara təklif ediləcəyinə zəmanət verir.

Apple-a görə, first responder statusu UIResponder və onun canBecomeFirstResponder və becomeFirstResponder metodları ilə sıx bağlıdır. Varsayılan olaraq UIView yalnız müəyyən alt siniflər üçün true qaytarır — UITextField, UITextView, UISearchBar. Digər view-lər, o cümlədən adi UIView, false qaytarır, bu da təsadüfi təyinatın qarşısını alır.

First Responder necə təyin olunur

Təyinat first responder iki yolla baş verə bilər: avtomatik, istifadəçi UITextField-ə toxunduqda (sistem daxili olaraq becomeFirstResponder-i çağırır) və ya proqram olaraq, developer hər hansı UIResponder obyektində becomeFirstResponder metodunu açıq şəkildə çağırdıqda.

Təyinatdan əvvəl iOS canBecomeFirstResponder-i yoxlayır. Metod false qaytarırsa, becomeFirstResponder çağırışı nəzərə alınmır və obyekt first responder olmur. Bu, hadisələri emal etməyə hazır olmayan obyektlərin — məsələn, gizli və ya söndürülmüş interfeys elementlərinin təyin edilməsinin qarşısını alan qoruyucu mexanizmdir.

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

// Proqram təyinatı
textField.becomeFirstResponder()

// First responder olub-olmadığını yoxla
if textField.isFirstResponder {
    print("TextField indi first responder-dir")
}

Yeni first responder təyin edilərkən iOS avtomatik olaraq əvvəlki obyektdə resignFirstResponder-i çağırır. Bu, sistemdə həmişə yalnız bir obyektin first responder statusuna malik olmasına zəmanət verir. Yeni obyekt first responder ola bilmirsə (canBecomeFirstResponder = false), köhnə öz statusunu saxlayır.

First Responder və klaviatura

iOS klaviaturası məhz first responder mexanizmi sayəsində ekranda görünür. UITextField və ya UITextView first responder olduqda, sistem avtomatik olaraq bu sahənin cari keyboardType-nə uyğun klaviaturanı göstərir. First responder imtina etdikdə klaviatura gizlənir.

Bu davranış iOS-da əsas UX mexanizmidir: istifadəçi giriş sahəsinə toxunur — klaviatura görünür; Return düyməsini basır və ya başqa sahəyə toxunur — klaviatura dəyişir və ya gizlənir. Developer UIResponder metodları, həmçinin inputView və inputAccessoryView vasitəsilə standart klaviaturanı xüsusi ilə əvəz edərək bunu idarə edə bilər.

Input Accessory View — klaviatura üzərində əlavə paneldir, o da first responder-ə bağlıdır. Məsələn, giriş sahələri arasında naviqasiya üçün Next, Previous, Done düymələri olan panel. Klaviatura ilə birlikdə göstərilir və gizlənir, first responder statusu ilə sinxronlaşır.

HadisəFirst responder statusuKlaviatura
UITextField-ə toxunmaFirst responder olurGörünür
Return basılmasıQalır və ya imtina edirQalır və ya gizlənir
Başqa sahəyə toxunmaYeni sahəyə keçirDəyişir
resignFirstResponder çağırışıLəğv olunurGizlənir
Tətbiqin gizlədilməsiAvtomatik imtinaGizlənir

First Responder imtinası

ResignFirstResponder — UIResponder metodudur, obyektdən first responder statusunu ləğv edir. Çağırışdan sonra obyekt giriş hadisələrini qəbul etməyi dayandırır, klaviatura (aktiv idisə) gizlənir. Metod Bool qaytarır — imtina uğurlu olarsa true.

Developer-lər tez-tez resignFirstResponder-i Done düyməsinin basılmasına cavab olaraq, ekranın boş sahəsinə toxunma (view.endEditing) və ya ekrandan çıxarkən çağırırlar. view.endEditing(true) — bütün uşaq mətn sahələri üçün bir dəfəyə imtina etməyin rahat üsuludur: bütün view iyerarxiyasını gəzir və cari first responder-də resignFirstResponder çağırır.

swift
// Done düyməsinə basıldıqda imtina
@objc func doneButtonTapped() {
    textField.resignFirstResponder()
}

// Boş sahəyə toxunulduqda imtina
override func touchesBegan(
    _ touches: Set<UITouch>,
    with event: UIEvent?
) {
    view.endEditing(true)
}

// Bütün forma sahələri üçün imtina
func validateAndSubmit() {
    view.endEditing(true)
    // Forma göndərmə məntiqi
}

Bəzi hallarda resignFirstResponder false qaytara bilər. Bu, obyekt metodu ləğv edibsə və statusun ləğvini açıq şəkildə qadağan edibsə baş verir. Məsələn, validasiya prosesində olan mətn sahəsi məlumat itkisinin qarşısını almaq üçün müvəqqəti olaraq imtinanı bloklaya bilər. Belə hallarda validasiyanın bitməsini gözləmək və yalnız sonra məcburi imtina etmək lazımdır.

First Responder yoxlanması və monitorinqi

UIResponder isFirstResponder xassəsini (yalnız oxumaq üçün) təqdim edir, bu da verilən obyektin hazırda first responder olub-olmadığını göstərir. Bu, şərti məntiq üçün faydalıdır — məsələn, mətn sahəsi fokusdadırsa və istifadəçi məlumat daxil edirsə, hərəkəti yerinə yetirməmək üçün.

iOS bütün tətbiq miqyasında cari first responder-i əldə etmək üçün daxili API təmin etmir. Developer-lər bu imkanı UIResponder metodu ilə view iyerarxiyasını gəzərək yaradırlar. Apple həlli first responder-ə zəif istinadı tövsiyə edir, onu KVO və ya delegate-lər vasitəsilə yeniləmək olar.

swift
// First responder tapmaq üçün genişləndirmə
extension UIView {
    var firstResponder: UIResponder? {
        guard isFirstResponder else {
            return subviews.compactMap { $0.firstResponder }.first
        }
        return self
    }
}

// İstifadə
if let current = view.firstResponder {
    print("Current first responder: \(current)")
}

First responder dəyişikliklərini izləmək üçün UIResponder.keyboardWillShowNotification və UIResponder.keyboardWillHideNotification bildirişlərinə abunə olmaq olar — onlar dolayı yolla hansısa mətn obyektinin first responder olduğunu və ya olmadığını göstərir. Lakin isFirstResponder dəyişikliyinə birbaşa abunəlik mövcud deyil; bunun üçün KVO və ya xüsusi delegate-lər istifadə olunur.

First Responder və xüsusi view-lər

Xüsusi view-lər canBecomeFirstResponder-i ləğv edib true qaytararaq first responder ola bilərlər. Bu, klaviatura və ya fiziki düymə hadisələrini qəbul etməli olan komponentlər üçün zəruridir — məsələn, xüsusi oyun kontrollerləri və ya UITextView əsaslı kod redaktorları.

Xüsusi first responder yaradarkən əlçatanlığı xatırlamaq vacibdir: VoiceOver və Switch Control naviqasiya üçün first responder-in düzgün təyinatına güvənir. Xüsusi view first responder olarsa, o, UIAccessibility protokolunu düzgün tətbiq etməli və köməkçi texnologiyalara öz statusu barədə məlumat verməlidir.

Xüsusi giriş üçün (məsələn, barkod skaneri və ya rəqəm klaviaturası) inputView xassəsini ləğv edin — bu view first responder olduqda standart klaviatura əvəzinə göstəriləcək xüsusi UIView qaytarın. Eynilə, inputAccessoryView klaviatura üzərində panel əlavə edir.

Tez-tez verilən suallar

iOS-da First Responder nədir?

First Responder — hazırda giriş hadisələrini (toxunma, düymələr, akselerometr) qəbul edən UIResponder obyektidir. becomeFirstResponder vasitəsilə təyin olunur, canBecomeFirstResponder-dən true qaytarmalıdır. Tətbiqdə yalnız bir obyekt first responder ola bilər.

UITextField-i toxunmadan first responder necə etmək olar?

textField.becomeFirstResponder()-i proqram olaraq çağırın, məsələn, viewDidAppear-da. textField-in gizli olmadığına, userInteractionEnabled = true və isEnabled = true olduğuna əmin olun. Sahə UITableView və ya UICollectionView-dədirsə, hüceyrənin ekranda göründüyünü yoxlayın.

Mətn sahəsindən kənara toxunaraq klaviaturanı necə gizlətmək olar?

Əsas view-ə UITapGestureRecognizer əlavə edin və onun işləyicisində view.endEditing(true) çağırın. Bu avtomatik olaraq cari first responder-i tapacaq və resignFirstResponder çağıracaq. Alternativ olaraq UIViewController-də touchesBegan-i endEditing çağırışı ilə ləğv edin.

Niyə becomeFirstResponder false qaytarır?

becomeFirstResponder false qaytarır, əgər canBecomeFirstResponder false qaytarırsa, view gizlidir, pəncərə iyerarxiyasında deyil və ya userInteractionEnabled = false. Həmçinin view-in pəncərəyə əlavə edildiyini yoxlayın — ekranda olmayan view-də becomeFirstResponder işləməyəcək.

Hansı obyektin hazırda first responder olduğunu necə müəyyən etmək olar?

iOS bunun üçün qlobal API təmin etmir. Hər subview-də isFirstResponder-i yoxlayan UIView genişləndirməsi vasitəsilə view iyerarxiyasının rekursiv gəzilməsindən istifadə edin. Alternativ — AppDelegate-də son first responder-ə zəif istinad saxlayın və onu UITextField delegate-ləri vasitəsilə yeniləyin.

Nəticə

  • First Responder — iOS-da giriş hadisələrini qəbul edən yeganə UIResponder obyektidir. Responder Chain-in ilk halqasıdır.
  • becomeFirstResponder obyekti first responder təyin edir, ancaq canBecomeFirstResponder true qaytararsa — bu sistemin açıq qoruyucu mexanizmidir.
  • resignFirstResponder first responder statusunu ləğv edir; mətn sahələri üçün avtomatik olaraq klaviaturanı gizlədir.
  • UITextField və UITextView fokus aldıqda first responder olur və başqa sahədə becomeFirstResponder çağırılaraq proqram olaraq dəyişdirilə bilər.
  • view.endEditing(true) — view iyerarxiyasındakı bütün uşaq responder obyektləri üçün imtina etməyin rahat üsuludur.
  • Xüsusi view-lər xüsusi giriş ssenariləri üçün canBecomeFirstResponder-i ləğv edərək first responder ola bilər.
  • First responder izlənməsi subviews-in rekursiv gəzilməsi və ya dolayı yolla klaviatura bildirişləri vasitəsilə həyata keçirilir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun