First Responder: bu nima, maqsadi va kiritish obyekti

Muallif: IT Sectr Nashr etilgan: 2026-07-09 O'qish vaqti: 9 daq

First Responder — iOS'dagi UIResponder obyekti bo'lib, birinchi bo'lib teginish hodisalarini, tugma bosishlarini, silkish imo-ishoralarini va menyu buyruqlarini qabul qiladi. Har bir daqiqada ilovada faqat bitta obyekt first responder bo'lishi mumkin. Tayinlash avtomatik (UITextField fokusida) yoki dasturiy ravishda becomeFirstResponder metodi orqali amalga oshiriladi. Apple Developer Documentation (2026) ma'lumotlariga ko'ra, obyekt faqat canBecomeFirstResponder metodi true qaytarsagina first responder bo'lishi mumkin, bu mexanizmni aniq va boshqariladigan qiladi.

Asosiy fikrlar

  • First Responder — kiritish hodisalarining asosiy qabul qiluvchisi, avtomatik yoki becomeFirstResponder orqali tayinlanadi.
  • Faqat bitta obyekt ilovada ma'lum bir vaqtda first responder bo'lishi mumkin.
  • canBecomeFirstResponder obyektning first responder bo'lishi uchun true qaytarishi kerak.
  • ResignFirstResponder first responder statusini olib tashlaydi va UITextField uchun klaviaturani yashiradi.
  • UITextField va UITextView foydalanuvchidan fokus olganda first responder bo'ladi.

First Responder nima

First Responder — iOS ilovasida hozirda kiritish hodisalarini qabul qiluvchi UIResponder obyektidir. Tizim barcha teginish hodisalarini, tugma bosishlarini, harakat hodisalarini (qurilmani silkitish) va aksiya xabarlarini (masalan, kontekst menyusini chaqirish) aynan shu obyektga yo'naltiradi.

First responder tushunchasi Responder Chain ning birinchi bo'g'inidir. Agar first responder qabul qilingan hodisani qayta ishlamasa, u avtomatik ravishda zanjirdagi keyingi obyektga uzatiladi. Bu hodisaning yo'qolmasligini, balki ierarxiyadagi barcha potentsial ishlovchilarga ketma-ket taklif qilinishini kafolatlaydi.

Apple'ga ko'ra, first responder statusi UIResponder va uning canBecomeFirstResponder va becomeFirstResponder metodlari bilan chambarchas bog'liq. Odatiy bo'yicha UIView faqat ma'lum kichik sinflar uchun true qaytaradi — UITextField, UITextView, UISearchBar. Boshqa ko'rinishlar, jumladan oddiy UIView, false qaytaradi, bu tasodifiy tayinlashning oldini oladi.

First Responder qanday tayinlanadi

Tayinlash first responder ikki xil usulda amalga oshirilishi mumkin: avtomatik, foydalanuvchi UITextField'ga tekkanda (tizim ichki becomeFirstResponder'ni chaqiradi) yoki dasturiy, dasturchi har qanday UIResponder obyektida becomeFirstResponder metodini aniq chaqirganda.

Tayinlashdan oldin iOS canBecomeFirstResponder ni tekshiradi. Agar metod false qaytarsa, becomeFirstResponder chaqiruvi e'tiborga olinmaydi va obyekt first responder bo'lmaydi. Bu hodisalarni qayta ishlashga tayyor bo'lmagan obyektlarning — masalan, yashirin yoki o'chirilgan interfeys elementlarining tayinlanishining oldini oluvchi himoya mexanizmidir.

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

// Dasturiy tayinlash
textField.becomeFirstResponder()

// First responder ekanligini tekshirish
if textField.isFirstResponder {
    print("TextField endi first responder")
}

Yangi first responder tayinlanganda iOS avtomatik ravishda avvalgi obyektda resignFirstResponder ni chaqiradi. Bu tizimda har doim faqat bitta obyektning first responder statusiga ega bo'lishini kafolatlaydi. Agar yangi obyekt first responder bo'la olmasa (canBecomeFirstResponder = false), eski o'z statusini saqlab qoladi.

First Responder va klaviatura

iOS klaviaturasi aynan first responder mexanizmi tufayli ekranda paydo bo'ladi. UITextField yoki UITextView first responder bo'lganda, tizim avtomatik ravishda ushbu maydonning joriy keyboardType'iga mos klaviaturani ko'rsatadi. First responder voz kechganda klaviatura yashirinadi.

Bu xatti-harakat iOS'da asosiy UX mexanizmi hisoblanadi: foydalanuvchi kiritish maydoniga tegadi — klaviatura paydo bo'ladi; Return tugmasini bosadi yoki boshqa maydonga tegadi — klaviatura o'zgaradi yoki yashirinadi. Dasturchi buni UIResponder metodlari, shuningdek inputView va inputAccessoryView orqali standart klaviaturani maxsus bilan almashtirib boshqarishi mumkin.

Input Accessory View — klaviatura ustidagi qo'shimcha panel bo'lib, u ham first responder'ga bog'langan. Masalan, kiritish maydonlari o'rtasida navigatsiya uchun Next, Previous, Done tugmalari bo'lgan panel. Klaviatura bilan birga ko'rsatiladi va yashirinadi, first responder statusi bilan sinxronlanadi.

HodisaFirst responder statusiKlaviatura
UITextField'ga tegishFirst responder bo'ladiPaydo bo'ladi
Return bosilishiQoladi yoki voz kechadiQoladi yoki yashirinadi
Boshqa maydonga tegishYangi maydonga o'tadiO'zgaradi
resignFirstResponder chaqiruviOlib tashlanadiYashirinadi
Ilovani yashirishAvtomatik voz kechadiYashirinadi

First Responder voz kechishi

ResignFirstResponder — UIResponder metodi bo'lib, obyektdan first responder statusini olib tashlaydi. Chaqiruvdan so'ng obyekt kiritish hodisalarini qabul qilishni to'xtatadi va klaviatura (agar faol bo'lsa) yashirinadi. Metod Bool qaytaradi — voz kechish muvaffaqiyatli bo'lsa true.

Dasturchilar ko'pincha resignFirstResponder'ni Done tugmasi bosilganda, ekranning bo'sh joyiga tegilganda (view.endEditing) yoki ekrandan chiqishda chaqiradilar. view.endEditing(true) — barcha bola matn maydonlari uchun bir yo'la voz kechishning qulay usulidir: butun ko'rinish ierarxiyasi bo'ylab o'tadi va joriy first responder'da resignFirstResponder'ni chaqiradi.

swift
// Done tugmasi bosilganda voz kechish
@objc func doneButtonTapped() {
    textField.resignFirstResponder()
}

// Bo'sh joyga tegilganda voz kechish
override func touchesBegan(
    _ touches: Set<UITouch>,
    with event: UIEvent?
) {
    view.endEditing(true)
}

// Barcha forma maydonlari uchun voz kechish
func validateAndSubmit() {
    view.endEditing(true)
    // Forma yuborish mantig'i
}

Ba'zi holatlarda resignFirstResponder false qaytarishi mumkin. Bu obyekt metodni bekor qilgan va statusni olib tashlashni aniq taqiqlagan bo'lsa sodir bo'ladi. Masalan, validatsiya jarayonidagi matn maydoni ma'lumotlar yo'qolishining oldini olish uchun vaqtincha voz kechishni bloklashi mumkin. Bunday hollarda validatsiya tugashini kutish va shundan keyingina majburiy voz kechish kerak.

First Responder tekshiruvi va monitoringi

UIResponder isFirstResponder xususiyatini (faqat o'qish uchun) taqdim etadi, u berilgan obyekt hozirda first responder bo'lsa true qaytaradi. Bu shartli mantiq uchun foydali — masalan, matn maydoni fokusda bo'lsa va foydalanuvchi ma'lumot kiritsa, harakatni bajarmaslik uchun.

iOS butun ilova miqyosida joriy first responder ni olish uchun o'rnatilgan API'ni taqdim etmaydi. Dasturchilar bu imkoniyatni UIResponder metodi yordamida ko'rinish ierarxiyasini aylanib o'tish orqali yaratadilar. Apple yechimi first responder'ga zaif havolani tavsiya qiladi, uni KVO yoki delegatlar orqali yangilash mumkin.

swift
// First responder topish uchun kengaytma
extension UIView {
    var firstResponder: UIResponder? {
        guard isFirstResponder else {
            return subviews.compactMap { $0.firstResponder }.first
        }
        return self
    }
}

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

First responder o'zgarishlarini kuzatish uchun UIResponder.keyboardWillShowNotification va UIResponder.keyboardWillHideNotification bildirishnomalariga obuna bo'lish mumkin — ular bilvosita qandaydir matn obyekti first responder bo'lgani yoki bo'lishni to'xtatganini ko'rsatadi. Biroq, isFirstResponder o'zgarishiga to'g'ridan-to'g'ri obuna mavjud emas; buning uchun KVO yoki maxsus delegatlar ishlatiladi.

First Responder va maxsus ko'rinishlar

Maxsus ko'rinishlar canBecomeFirstResponder'ni bekor qilib, true qaytarib, first responder bo'lishi mumkin. Bu klaviatura yoki jismoniy tugma hodisalarini qabul qilishi kerak bo'lgan komponentlar uchun zarur — masalan, maxsus o'yin kontrollerlari yoki UITextView'ga asoslangan kod muharrirlari.

Maxsus first responder yaratishda foydalanish imkoniyatini esda tutish muhim: VoiceOver va Switch Control navigatsiya uchun first responder'ning to'g'ri tayinlanishiga tayanadi. Agar maxsus ko'rinish first responder bo'lsa, u UIAccessibility protokolini to'g'ri amalga oshirishi va yordamchi texnologiyalarga o'z statusi haqida xabar berishi kerak.

Maxsus kiritish uchun (masalan, shtrix-kod skaneri yoki raqamli klaviatura) inputView xususiyatini bekor qiling — ushbu ko'rinish first responder bo'lganda standart klaviatura o'rniga ko'rsatiladigan maxsus UIView'ni qaytaring. Xuddi shunday, inputAccessoryView klaviatura ustiga panel qo'shadi.

Ko'p beriladigan savollar

iOS'da First Responder nima?

First Responder — hozirda kiritish hodisalarini (teginish, tugmalar, akselerometr) qabul qiluvchi UIResponder obyektidir. becomeFirstResponder orqali tayinlanadi, canBecomeFirstResponder'dan true qaytarishi kerak. Ilovada faqat bitta obyekt first responder bo'lishi mumkin.

UITextField'ni teginmasdan first responder qanday qilish mumkin?

textField.becomeFirstResponder() ni dasturiy chaqiring, masalan, viewDidAppear'da. textField yashirin emasligiga, userInteractionEnabled = true va isEnabled = true ekanligiga ishonch hosil qiling. Agar maydon UITableView yoki UICollectionView'da bo'lsa, hujayraning ekranda ko'rinishini tekshiring.

Matn maydonidan tashqariga tegib klaviaturani qanday yashirish mumkin?

Asosiy ko'rinishga UITapGestureRecognizer qo'shing va uning ishlovchisida view.endEditing(true) ni chaqiring. Bu avtomatik ravishda joriy first responder'ni topadi va resignFirstResponder'ni chaqiradi. Shu bilan bir qatorda, UIViewController'da touchesBegan'ni endEditing chaqiruvi bilan bekor qiling.

Nega becomeFirstResponder false qaytaradi?

becomeFirstResponder false qaytaradi, agar canBecomeFirstResponder false qaytarsa, ko'rinish yashirin bo'lsa, oyna ierarxiyasida bo'lmasa yoki userInteractionEnabled = false bo'lsa. Shuningdek, ko'rinishning oynaga qo'shilganligini tekshiring — ekranda bo'lmagan ko'rinish becomeFirstResponder bilan ishlamaydi.

Qaysi obyekt hozirda first responder ekanligini qanday aniqlash mumkin?

iOS buning uchun global API taqdim etmaydi. Har bir subview'da isFirstResponder'ni tekshiruvchi UIView kengaytmasi orqali ko'rinish ierarxiyasini rekursiv aylanib o'tishdan foydalaning. Muqobil — AppDelegate'da oxirgi first responder'ga zaif havolani saqlang va uni UITextField delegatlari orqali yangilang.

Xulosa

  • First Responder — iOS'da kiritish hodisalarini qabul qiluvchi yagona UIResponder obyekti. Responder Chain'ning birinchi bo'g'ini.
  • becomeFirstResponder obyektni first responder qilib tayinlaydi, lekin faqat canBecomeFirstResponder true qaytarsa — bu tizimning aniq himoya mexanizmi.
  • resignFirstResponder first responder statusini olib tashlaydi; matn maydonlari uchun avtomatik klaviaturani yashiradi.
  • UITextField va UITextView fokusda first responder bo'ladi va boshqa maydonda becomeFirstResponder chaqirish orqali dasturiy o'zgartirilishi mumkin.
  • view.endEditing(true) — ko'rinish ierarxiyasidagi barcha bola responder obyektlari uchun voz kechishning qulay usuli.
  • Maxsus ko'rinishlar maxsus kiritish ssenariylari uchun canBecomeFirstResponder'ni bekor qilib, first responder bo'lishi mumkin.
  • First responder kuzatuvi subview'larni rekursiv aylanib o'tish yoki bilvosita klaviatura bildirishnomalari orqali amalga oshiriladi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing