First Responder — adalah objek UIResponder di iOS yang pertama kali menerima peristiwa sentuhan, tekanan tombol, gerakan goyangan, dan perintah menu. Setiap saat hanya satu objek dalam aplikasi yang dapat menjadi first responder. Penetapan terjadi secara otomatis (saat fokus UITextField) atau secara programatis melalui metode becomeFirstResponder. Menurut Apple Developer Documentation (2026), sebuah objek dapat menjadi first responder hanya jika metode canBecomeFirstResponder-nya mengembalikan true, yang membuat mekanisme ini eksplisit dan terkendali.
Poin Utama
First Responder — adalah objek UIResponder yang saat ini menerima peristiwa masukan dalam aplikasi iOS. Sistem mengarahkan semua peristiwa sentuhan, tekanan tombol, peristiwa gerakan (goyangan perangkat) dan pesan aksi (misalnya memanggil menu konteks) tepat ke objek ini.
Konsep first responder adalah mata rantai pertama dalam Responder Chain. Jika first responder tidak memproses peristiwa yang diterima, peristiwa tersebut secara otomatis diteruskan ke objek berikutnya dalam rantai. Ini memastikan bahwa peristiwa tidak hilang, tetapi ditawarkan secara berurutan kepada semua pemroses potensial dalam hierarki.
Menurut Apple, status first responder terkait erat dengan UIResponder dan metode-metodenya canBecomeFirstResponder dan becomeFirstResponder. Secara default, UIView hanya mengembalikan true untuk subkelas tertentu — UITextField, UITextView, UISearchBar. Tampilan lain, termasuk UIView biasa, mengembalikan false, yang mencegah penetapan yang tidak disengaja.
Penetapan first responder dapat terjadi dengan dua cara: secara otomatis, ketika pengguna menyentuh UITextField (sistem secara internal memanggil becomeFirstResponder), atau secara programatis, ketika pengembang secara eksplisit memanggil metode becomeFirstResponder pada objek UIResponder mana pun.
Sebelum penetapan, iOS memeriksa canBecomeFirstResponder. Jika metode mengembalikan false, panggilan becomeFirstResponder diabaikan dan objek tidak menjadi first responder. Ini adalah mekanisme perlindungan yang mencegah penetapan objek yang tidak siap memproses peristiwa — misalnya, elemen antarmuka yang tersembunyi atau dinonaktifkan.
class CustomTextField: UITextField {
override var canBecomeFirstResponder: Bool {
return super.canBecomeFirstResponder
}
}
// Penetapan programatis
textField.becomeFirstResponder()
// Periksa apakah first responder
if textField.isFirstResponder {
print("TextField sekarang menjadi first responder")
}
Saat menetapkan first responder baru, iOS secara otomatis memanggil resignFirstResponder pada yang sebelumnya. Ini memastikan bahwa selalu hanya satu objek dalam sistem yang memiliki status first responder. Jika objek baru tidak dapat menjadi first responder (canBecomeFirstResponder = false), objek lama mempertahankan statusnya.
Keyboard iOS muncul di layar justru berkat mekanisme first responder. Ketika UITextField atau UITextView menjadi first responder, sistem secara otomatis menampilkan keyboard yang terhubung dengan keyboardType bidang tersebut saat ini. Saat melepas first responder, keyboard disembunyikan.
Perilaku ini adalah mekanisme UX utama di iOS: pengguna menyentuh bidang masukan — keyboard muncul; menekan Return atau menyentuh bidang lain — keyboard beralih atau disembunyikan. Pengembang dapat mengelola ini melalui metode UIResponder, serta melalui inputView dan inputAccessoryView untuk mengganti keyboard standar dengan keyboard kustom.
Input Accessory View — adalah panel tambahan di atas keyboard, yang juga terikat pada first responder. Misalnya, panel dengan tombol Next, Previous, Done untuk navigasi antar bidang masukan. Panel ini muncul dan disembunyikan bersama dengan keyboard, disinkronkan dengan status first responder.
| Peristiwa | Status first responder | Keyboard |
|---|---|---|
| Menyentuh UITextField | Menjadi first responder | Muncul |
| Menekan Return | Tetap atau melepas | Tetap atau disembunyikan |
| Menyentuh bidang lain | Berpindah ke bidang baru | Beralih |
| Memanggil resignFirstResponder | Dihapus | Disembunyikan |
| Menyembunyikan aplikasi | Otomatis melepas | Disembunyikan |
ResignFirstResponder — adalah metode UIResponder yang menghapus status first responder dari objek. Setelah dipanggil, objek berhenti menerima peristiwa masukan, dan keyboard (jika aktif) disembunyikan. Metode mengembalikan Bool — true jika pelepasan berhasil.
Pengembang sering memanggil resignFirstResponder sebagai respons terhadap penekanan tombol Done, menyentuh area kosong layar (view.endEditing) atau saat meninggalkan layar. view.endEditing(true) — adalah cara yang nyaman untuk melepas semua bidang teks anak sekaligus: ia menelusuri seluruh hierarki tampilan dan memanggil resignFirstResponder pada first responder saat ini.
// Melepas saat menekan Done
@objc func doneButtonTapped() {
textField.resignFirstResponder()
}
// Melepas saat menyentuh area kosong
override func touchesBegan(
_ touches: Set<UITouch>,
with event: UIEvent?
) {
view.endEditing(true)
}
// Melepas untuk semua bidang formulir
func validateAndSubmit() {
view.endEditing(true)
// Logika pengiriman formulir
}
Ada situasi di mana resignFirstResponder dapat mengembalikan false. Ini terjadi jika objek telah menimpa metode dan secara eksplisit melarang penghapusan status. Misalnya, bidang teks yang sedang dalam proses validasi dapat sementara memblokir pelepasan untuk mencegah kehilangan data. Dalam kasus seperti itu, Anda harus menunggu validasi selesai dan baru kemudian memaksa pelepasan.
UIResponder menyediakan properti isFirstResponder (hanya-baca), yang mengembalikan true jika objek yang diberikan saat ini menjadi first responder. Ini berguna untuk logika bersyarat — misalnya, untuk tidak menjalankan suatu tindakan jika bidang teks sedang dalam fokus dan pengguna memasukkan data.
iOS tidak menyediakan API bawaan untuk mendapatkan first responder saat ini di seluruh aplikasi. Pengembang membuat kemampuan ini melalui penelusuran hierarki tampilan menggunakan metode UIResponder. Solusi Apple merekomendasikan referensi lemah ke first responder, yang dapat diperbarui melalui KVO atau delegasi.
// Ekstensi untuk menemukan first responder
extension UIView {
var firstResponder: UIResponder? {
guard isFirstResponder else {
return subviews.compactMap { $0.firstResponder }.first
}
return self
}
}
// Penggunaan
if let current = view.firstResponder {
print("Current first responder: \(current)")
}
Untuk melacak perubahan first responder, Anda dapat berlangganan pemberitahuan UIResponder.keyboardWillShowNotification dan UIResponder.keyboardWillHideNotification — mereka secara tidak langsung menunjukkan bahwa suatu objek teks telah menjadi atau berhenti menjadi first responder. Namun, tidak ada langganan langsung untuk perubahan isFirstResponder; untuk ini digunakan KVO atau delegasi kustom.
Tampilan kustom dapat menjadi first responder jika mereka menimpa canBecomeFirstResponder dan mengembalikan true. Ini diperlukan untuk komponen yang harus menerima peristiwa keyboard atau tombol fisik — misalnya, pengontrol game kustom atau editor kode berbasis UITextView.
Saat membuat first responder kustom, penting untuk mengingat aksesibilitas: VoiceOver dan Switch Control mengandalkan penetapan first responder yang benar untuk navigasi. Jika tampilan kustom menjadi first responder, ia harus mengimplementasikan protokol UIAccessibility dengan benar dan memberi tahu teknologi bantu tentang statusnya.
Untuk masukan kustom (misalnya, pemindai kode batang atau keyboard numerik) timpa properti inputView — kembalikan UIView kustom yang akan ditampilkan sebagai pengganti keyboard standar ketika tampilan ini menjadi first responder. Demikian pula, inputAccessoryView menambahkan panel di atas keyboard.
Pertanyaan yang Sering Diajukan
First Responder — adalah objek UIResponder yang saat ini menerima peristiwa masukan (sentuhan, tombol, akselerometer). Ditunjuk melalui becomeFirstResponder, harus mengembalikan true dari canBecomeFirstResponder. Hanya satu objek yang dapat menjadi first responder dalam aplikasi.
Panggil textField.becomeFirstResponder() secara programatis, misalnya di viewDidAppear. Pastikan textField tidak tersembunyi, userInteractionEnabled = true, dan isEnabled = true. Jika bidang berada di UITableView atau UICollectionView, pastikan sel terlihat di layar.
Tambahkan UITapGestureRecognizer ke tampilan utama dan di handlernya panggil view.endEditing(true). Ini akan secara otomatis menemukan first responder saat ini dan memanggil resignFirstResponder. Alternatifnya, timpa touchesBegan di UIViewController dengan panggilan endEditing.
becomeFirstResponder mengembalikan false jika canBecomeFirstResponder mengembalikan false, tampilan tersembunyi, tidak dalam hierarki jendela, atau userInteractionEnabled = false. Juga periksa apakah tampilan telah ditambahkan ke jendela — tampilan yang tidak ada di layar tidak akan berfungsi dengan becomeFirstResponder.
iOS tidak menyediakan API global untuk ini. Gunakan penelusuran rekursif hierarki tampilan melalui ekstensi UIView yang memeriksa isFirstResponder di setiap subview. Alternatif — simpan referensi lemah ke last first responder di AppDelegate dan perbarui melalui delegasi UITextField.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga