Saya tahu bahwa saya perlu memberi tahu UITextField saya untuk mengundurkan diri sebagai responden pertama ketika saya ingin menghapus keyboard, tetapi saya tidak yakin bagaimana mengetahui kapan pengguna telah menekan tombol "Selesai" pada keyboard. Apakah ada pemberitahuan yang dapat saya perhatikan?
181
Jawaban:
Saya mengatur delegasi
UITextField
keViewController
kelas saya .Di kelas itu saya menerapkan metode ini sebagai berikut:
sumber
NO
bukanYES
?NO
Anda menghindari menambahkan baris kembali ke teks.Jika Anda menghubungkan acara DidEndOnExit dari bidang teks ke tindakan (IBAction) di InterfaceBuilder, itu akan dikirim ketika pengguna menolak keyboard (dengan tombol kembali) dan pengirim akan menjadi referensi ke UITextField yang memecat acara tersebut.
Sebagai contoh:
Lalu, di InterfaceBuilder, tautkan acara DidEndOnExit dari bidang teks ke tindakan ini di controller Anda (atau apa pun yang Anda gunakan untuk menautkan acara dari UI). Setiap kali pengguna memasukkan teks dan mengabaikan bidang teks, pengontrol akan dikirimi pesan ini.
sumber
Anda juga dapat membuat metode di controller Anda
dan kemudian di Inspektur Koneksi di IB menghubungkan Acara "Did End On Exit" untuk itu.
sumber
DidEndOnExit
acara tersebut, Anda tidak perlu meneleponresignFirstResponder
. Anda dapat menguji ini dengan meletakkan breakpoint simbolis pada[UIResponder resignFirstResponder]
. Perhatikan bahwa meskipun jika Anda tidak memanggil resignFirstResponder, itu masih dipanggil oleh sistem. Ini dijelaskan dalam buku bagus Matt Neuburg: apeth.com/iOSBook/…kubi, terima kasih. Kode Anda berfungsi. Untuk menjadi eksplisit (untuk pemula seperti) seperti yang Anda katakan Anda harus mengatur
UITextField
'sdelegate
agar sama dengan ViewController di mana bidang teks berada. Anda dapat melakukan ini di mana pun Anda mau. Saya memilihviewDidLoad
metode.sumber
delegate
sana juga. Anda tidak harus melakukan ini secara terprogram, seperti ditunjukkan di atas. Kedua pendekatan tersebut berfungsi dengan baik.Berikut adalah trik untuk mendapatkan perilaku pemberhentian keyboard otomatis tanpa kode sama sekali. Di nib, edit objek proxy Responder Pertama di inspektur Identitas, tambahkan tindakan responden pertama yang baru; sebut saja itu
dummy:
. Sekarang kaitkan kejadian Did End on Exit dari bidang teks kedummy:
tindakan objek proxy Responder Pertama. Itu dia! Karena acara Did End on Exit bidang teks sekarang memiliki pasangan tindakan-target, bidang teks secara otomatis menolak keyboard-nya ketika pengguna mengetuk Return; dan karena tidak ada penalti karena tidak menemukan penangan untuk pesan yang dikirim ke rantai responden, aplikasi tidak macet meskipun tidak ada implementasi didummy:
mana pun.sumber
Cukup tambahkan
di mana Anda ingin menonaktifkan keyboard dan menampilkan tampilan pemilih.
sumber
Di Swift Anda dapat menulis IBAction di Controller dan mengatur event Did End On Exit dari bidang teks ke action tersebut
sumber
Swift 4.2
dan itu akan bekerja 100%sumber
Anda juga bisa menggunakan
Yang terbaik jika Anda memiliki banyak Uitextfield:
sumber
Inilah yang harus saya lakukan untuk membuatnya berfungsi, dan saya pikir perlu bagi siapa pun dengan Papan Tombol untuk keyboard (atau yang lainnya tanpa tombol selesai:
Saya membuat fungsi yang disebut
Ini juga didefinisikan dalam file .h.
Setelah ini, saya ditautkan ke bit 'touch down' untuk ViewController di Interface Builder.
Dalam fungsi 'latar belakang disadap', saya letakkan ini:
Hanya ingat untuk mengubah 'answerField' ke nama UITextField yang ingin Anda hapus keyboardnya (jelas pastikan UITextField Anda didefinisikan seperti di bawah ini :)
Saya tahu topik ini mungkin sudah lama mati ... tapi saya berharap ini akan membantu seseorang, di suatu tempat!
sumber
Anda akan melihat bahwa metode "textFieldShouldReturn" menyediakan objek bidang teks yang telah menekan tombol DONE. Jika Anda mengatur TAG Anda dapat mengaktifkan bidang teks itu. Atau Anda dapat melacak dan membandingkan penunjuk objek dengan beberapa nilai anggota yang disimpan oleh penciptanya.
Pendekatan saya seperti ini untuk belajar mandiri:
Sementara itu, saya memasukkan tes "validasi" yang menyangkal pengunduran diri berikut. Ini hanya untuk ilustrasi, jadi jika pengguna mengetik TIDAK! ke lapangan, tidak akan diberhentikan. Perilaku itu seperti yang saya inginkan, tetapi urutan output tidak seperti yang saya harapkan.
Berikut ini adalah output NSLog saya untuk penolakan ini diikuti oleh penerimaan. Anda akan melihat bahwa saya mengembalikan hasil pengunduran diri, tetapi saya mengharapkannya mengembalikan FALSE kepada saya untuk melaporkan kembali kepada penelepon ?! Selain itu, ia memiliki perilaku yang diperlukan.
sumber
Berikut ini adalah cara yang cukup bersih untuk mengakhiri edisi dengan Return Key atau sentuhan di latar belakang.
Di pembangun Antarmuka, sisipkan bidang Anda dalam tampilan kelas UIFormView
Apa kelas ini:
Ini kodenya:
Antarmuka
Penerapan
Dengan mensubklasifikasikan formulir dan mengganti
textFieldValueIsValid:
metode, Anda dapat menghindari akhir edisi jika nilainya tidak benar untuk bidang yang diberikan.Jika bidang memiliki delegasi yang diatur di Interface Builder, maka formulir tidak mengubahnya. Saya tidak melihat banyak alasan untuk mengatur delegasi yang berbeda ke bidang tertentu, tetapi mengapa tidak ...
Ada banyak cara untuk meningkatkan kelas tampilan formulir ini - Melampirkan delegasi, melakukan beberapa tata letak, menangani ketika keyboard mencakup bidang (menggunakan frameEditingTextField saat ini), secara otomatis mulai edisi untuk bidang berikutnya, ...
Saya pribadi menyimpannya dalam kerangka kerja saya, dan selalu mensubklasifikasikannya untuk menambahkan fitur, ini sering kali berguna "apa adanya".
Saya harap ini akan membantu. Ceria semua
sumber
jika Anda ingin semua pengeditan dalam UIViewController dapat Anda gunakan.
dan jika Anda ingin mengabaikan menyembunyikan keyboard UITextField pertanda kemudian gunakan.
1. Tambahkan delegasi di viewcontroller.h Anda
membuat delegasi tidak dapat ke bidang teks Anda.
self.yourTextField.delegate = diri;
tambahkan metode ini ke viewcontroller Anda.
- (BOOL) textFieldShouldEndEditing: (UITextField *) textField {[textField resignFirstResponder]; kembalikan YA;}
sumber
Secara terprogram mengatur delegasi dari UITextField dengan cepat 3
Terapkan UITextFieldDelegate di file ViewController.Swift Anda (mis. Kelas ViewController: UIViewController, UITextFieldDelegate {)
// Tandai: - menangani delegasi textField ..
sumber
Buat fungsi hidekeyboard dan tautkan ke bidang teks dalam file .xib dan pilih DidEndOnExit
sumber
Jika Anda telah membuat tampilan menggunakan Interface Builder, Gunakan yang berikut ini Cukup buat metode,
Cukup klik kanan bidang teks dalam tampilan, dan atur acara sebagai Did End on Exit, dan kirimkan ke metode "dismissKeyboard".
Panduan terbaik untuk pemula adalah "Head First iPhone dan iPad Development, 2nd Edition"
sumber
coba ini
sumber
sumber
Siapa pun yang mencari Swift 3
1) Pastikan Delegate UITextField Anda terhubung ke ViewController Anda di Storyboard
2) Implementasikan UITextFieldDelegate di file ViewController.Swift Anda (mis. Kelas ViewController: UIViewController, UITextFieldDelegate {)
3) Gunakan metode delegasi di bawah ini
sumber
Ini adalah bagaimana saya mengabaikan keyboard di Swift 4.2 dan berfungsi untuk saya:
sumber
Swift 3, iOS 9+
@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}
UPD: Ini masih berfungsi dengan baik untuk saya. Saya pikir pria yang mengabdikan jawaban ini hanya tidak mengerti bahwa ia perlu mengikat tindakan ini ke UITextField di storyboard.
sumber
sumber