Saya bertanya-tanya bagaimana cara menghapus keyboard ketika pengguna menyentuh bagian luar a UITextField
.
ios
cocoa-touch
uitextfield
uikit
Jonepatr
sumber
sumber
Jawaban:
Anda harus menambahkan
UITapGestureRecogniser
dan menetapkannya ke tampilan, lalu panggil pengunduran diri responden pertama padaUITextField
pemilih di situ.Kode:
Di viewDidLoad
Di dismissKeyboard:
(Di mana
aTextField
bidang teks yang bertanggung jawab untuk keyboard)Versi Swift 3 terlihat seperti itu
Untuk dismisskeyboard
sumber
[aTextField resignFirstResponder]
akan[self.view endEditing:YES];
hal itu tidak perlu referensi ke bidang teks dan akan bekerja untuk beberapa textfield[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(endEditing:)]];
[tap setCancelsTouchesInView:NO];
per jawaban @qiaoyi; Saya punya masalah dengan tabel yang tidak menanggapi pilihan baris. 5 tahun kemudian, saya harap ini membantu orang lain.self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
Saya tumbuk beberapa jawaban.
Gunakan ivar yang diinisialisasi selama
viewDidLoad:
Singkirkan apa yang sedang diedit:
sumber
Lihat ini, ini akan menjadi cara termudah untuk melakukan itu,
Atau
Perpustakaan ini akan menangani termasuk pengguliran gulir otomatis, ketuk ruang untuk menyembunyikan keyboard, dll ...
https://github.com/michaeltyson/TPKeyboardAvoiding
sumber
Saya melihat bahwa beberapa orang mengalami masalah menggunakan
UITapGestureRecognizer
metode ini. Cara termudah yang saya lakukan untuk fungsionalitas ini sambil tetap membiarkan perilaku ketuk tombol yang ada tetap utuh adalah dengan menambahkan hanya satu baris ke jawaban @ Jensen2k:Ini memungkinkan tombol saya yang ada untuk tetap berfungsi tanpa menggunakan metode @Ditry Sitnikov.
Baca tentang itu di
property
sini (cariCancelsTouchesInView
): Referensi Kelas UIGestureRecognizerSaya tidak yakin bagaimana ini akan bekerja dengan scrollbar, karena saya melihat beberapa memiliki masalah dengan, tetapi mudah-mudahan ada orang lain yang mengalami skenario yang sama dengan saya.
sumber
UIImageView
, tambahkan[imageView setUserInteractionEnabled:NO];
dan Anda "mengklik" itu, yang membuat metode ini berfungsi.Lebih baik untuk membuat
UIView
instance AndaUIControl
(dalam pembangun antarmuka) dan kemudian menghubungkanTouchUpInside
acara mereka kedismissKeyboard
metode.IBAction
Metode ini akan terlihat seperti:sumber
UITapGestureRecognizer
Mengganggu mengetuk tombol di dalam tampilan).touchesEnded
tidak bekerja karena ada yangUIScrollView
mengacaukan rantai responden.)Cepat 4
Atur Anda
UIViewController
dengan metode ekstensi ini satu kali misalnya diviewDidLoad
:dan keyboard akan diberhentikan bahkan dengan mengetuk tombol
NavigationBar
.sumber
Versi cepat, ini bekerja dalam kombinasi dengan elemen lain (seperti a
UIButton
atau yang lainUITextField
):sumber
self
daripadaself.view
canclesTouchesInView
adalah properti yang berguna untuk digunakan. Terima kasih.c#
. FYI Tanda titik koma itu diizinkan oleh sintaks, hanya saja tidak perlu.Bagaimana dengan ini: Saya tahu ini adalah pos lama. Mungkin membantu seseorang :)
sumber
Ini adalah solusi umum yang baik:
Tujuan-C:
Cepat:
Berdasarkan solusi @icodebuster: https://stackoverflow.com/a/18756253/417652
sumber
Oneliner cepat 4
sumber
Saya pikir cara termudah (dan terbaik) untuk melakukan ini adalah dengan subklas pandangan global Anda dan menggunakan
hitTest:withEvent
metode untuk mendengarkan sentuhan apa pun. Sentuhan pada keyboard tidak terdaftar, jadi hitTest: withEvent hanya dipanggil saat Anda menyentuh / menggulir / menggesek / mencubit ... di tempat lain, lalu panggil[self endEditing:YES]
.Ini lebih baik daripada menggunakan
touchesBegan
karenatouchesBegan
tidak dipanggil jika Anda mengklik tombol di atas tampilan.UITapGestureRecognizer
Misalnya, lebih baik daripada yang tidak bisa mengenali gerakan gulir. Ini juga lebih baik daripada menggunakan layar redup karena dalam antarmuka pengguna yang kompleks dan dinamis, Anda tidak dapat menempatkan layar redup di mana-mana. Selain itu, tidak memblokir tindakan lain, Anda tidak perlu mengetuk dua kali untuk memilih tombol di luar (seperti dalam kasus aUIPopover
).Selain itu, ini lebih baik daripada menelepon
[textField resignFirstResponder]
, karena Anda mungkin memiliki banyak bidang teks di layar, jadi ini berfungsi untuk semuanya.sumber
Ini harus menjadi cara termudah untuk menyembunyikan keyboard Anda dengan menyentuh di luar:
(dari Cara mengabaikan keyboard saat pengguna mengetuk area lain di luar bidang teks? )
sumber
Jika tampilan tertanam sama sekali dalam
UIScrollView
maka Anda dapat menggunakan yang berikut:Yang pertama akan menghidupkan keyboard dari layar ketika tampilan tabel digulir dan yang berikutnya akan menyembunyikan keyboard seperti aplikasi Pesan biasa.
sumber
Anda dapat melakukan ini menggunakan Storyboard di XCode 6 ke atas:
Buat tindakan untuk menyembunyikan keyboard
Tambahkan ini ke file header kelas yang digunakan oleh ViewController Anda:
Kemudian tambahkan ini ke file implementasi dari ViewController yang sama:
Ini sekarang akan menjadi salah satu 'Tindakan yang Diterima' untuk adegan storyboard Anda (yaitu ViewController):
Menghubungkan aksi ke acara pengguna
Sekarang Anda perlu menghubungkan tindakan ini dengan gerakan pengguna menyentuh keyboard.
Penting - Anda perlu mengonversi 'UIView' yang terdapat di storyboard Anda ke UIControl , sehingga dapat menerima acara. Pilih tampilan dari hierarki Tampilan Kontroler Anda:
... dan ubah kelasnya:
Sekarang seret dari lingkaran kecil di sebelah 'aksi yang diterima' untuk adegan Anda, ke bagian 'kosong' dari adegan Anda (sebenarnya Anda menyeret 'Tindakan yang Diterima' ke UIControl). Anda akan ditunjukkan pilihan acara yang dapat Anda kaitkan dengan:
Pilih opsi 'touch up inside'. Anda sekarang telah mengaitkan IBAction yang Anda buat ke tindakan pengguna menyentuh keyboard. Ketika pengguna mengetuk keyboard, sekarang akan disembunyikan.
(CATATAN: Untuk mengaitkan tindakan ke acara, Anda juga dapat menyeret dari tindakan yang diterima langsung ke UIControl di hierarki Lihat Pengontrol Anda. Ini ditampilkan sebagai 'Kontrol' dalam hierarki.)
sumber
Jika saya benar, Anda ingin mengundurkan diri dari keyboard tetapi mengetuk bagian luar
textfield
tetapi Anda tidak memiliki referensitextfield
.Coba ini;
reftextField
Sekarang di
textFieldDidBeginEditing
set bidang teks yang dirujuk keSekarang Anda dapat dengan senang hati menggunakan pada jam tombol apa saja, (menambahkan tombol transparan pada mulai mengedit direkomendasikan)
Atau untuk pengunduran diri, coba tombol ini.
sumber
Hanya untuk menambah daftar di sini versi saya tentang cara menghilangkan keyboard di sentuhan luar.
viewDidLoad:
Di mana saja:
sumber
Banyak jawaban yang bagus di sini tentang menggunakan -
UITapGestureRecognizer
semuanya adalahUITextField
tombol clear (X) break . Solusinya adalah dengan menekan pengenal gesture melalui delegasinya:Ini bukan solusi yang paling kuat tetapi ini bekerja untuk saya.
sumber
return !touchViewIsButton
. Saya kira tombol-tombol lain yang perlu menghilangkan keyboard harus melakukannya dalam tindakan mereka. Selain itu TouchUpInside mungkin tidak dipanggil saat tata letak berubah pada pemberhentian keyboard.Anda dapat membuat kategori untuk UiView dan mengganti sentuhan. Mulai meathod sebagai berikut.
Ini berfungsi dengan baik untuk saya. Dan itu adalah solusi terpusat untuk masalah ini.
sumber
Versi cepat jawaban @ Jensen2k:
Satu liner
sumber
Saya menggunakan contoh Barry untuk pengembangan baru saya. Itu bekerja dengan baik! tetapi saya harus memasukkan sedikit perubahan, diperlukan untuk mengabaikan keyboard hanya untuk bidang teks yang sedang diedit.
Jadi, saya menambahkan ke Barry contoh berikut ini:
Saya juga mengubah metode hideKeyboard sebagai berikut:
sumber
Salah satu cara termudah dan terpendek adalah menambahkan kode ini ke
viewDidLoad
sumber
sumber
Saya mencoba banyak tanggapan di sini dan tidak berhasil. Pengenal isyarat keran saya selalu menyebabkan saya
UIButtons
tidak merespons ketika mengetuk, bahkan ketika saya menyetelcancelsTouchesInView
properti pengenal isyarat ke TIDAK.Inilah yang akhirnya memecahkan masalah:
Punya ivar:
Saat bidang teks mulai diedit, setel pengenal isyarat:
Maka triknya adalah bagaimana Anda mengatur
dismissKeyboard
metode:Saya kira ada sesuatu tentang mengeluarkan
dismissKeyboardSelector
eksekusi dari tumpukan eksekusi penanganan sentuhan ...sumber
Kirim pesan
resignFirstResponder
ke file teks yang meletakkannya di sana. Silakan lihat posting ini untuk informasi lebih lanjut.sumber
Ini bekerja
Dalam contoh ini, aTextField adalah satu-satunya UITextField .... Jika ada yang lain atau UITextViews, ada sedikit hal yang harus dilakukan.
sumber
sumber
Tambahkan kode ini di file ViewController.m Anda :
sumber
Dalam hal ini, bisa ada menggunakan ScrollView dan ditambahkan ke
TextField
dalam ScrollView dan saya ingin KetukScrollView
dan Lihat kemudian Singkirkan Keyboard. Saya mencoba membuat kode sampel untuk berjaga-jaga. Seperti ini,Storyboard Anda Lihat itu Sama Seperti.
sumber
Anda dapat menggunakan metode UITapGestureRecongnizer untuk mengabaikan keyboard dengan mengklik di luar UITextField. Dengan menggunakan metode ini setiap kali pengguna akan mengklik di luar UITextField maka keyboard akan diberhentikan. Di bawah ini adalah cuplikan kode untuk menggunakannya.
sumber
Tetapkan delegasi bidang teks dalam tampilan yang dimuat:
Tambahkan Fungsi ini:
sumber