Saya menggunakan UITextfied
saat mengklik pada keyboard textfied muncul tetapi ketika saya menekan returntombol, keyboard tidak menghilang. Saya menggunakan kode berikut:
func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
return true;
}
metode resignfirstresponder tidak berfungsi.
ios
swift
uitextfield
Ashwinkumar Mangrulkar
sumber
sumber
Jawaban:
Anda dapat membuat aplikasi mengabaikan keyboard menggunakan fungsi berikut
Berikut adalah contoh lengkap untuk menggambarkan dengan lebih baik bahwa:
Sumber kode: http://www.snip2code.com/Snippet/85930/swift-delegate-sample
sumber
UITextFieldDelegate
!func textFieldShouldReturn(textField: UITextField) -> Bool {
ganti kefunc textFieldShouldReturn(_ textField: UITextField) -> Bool {
Bagian
return true
dari ini hanya memberi tahu bidang teks apakah diizinkan untuk kembali atau tidak.Anda harus secara manual memberi tahu bidang teks untuk mengabaikan keyboard (atau apa pun responden pertamanya), dan ini dilakukan dengan
resignFirstResponder()
, seperti:sumber
UITextFieldDelegate
?Tambahkan
UITextFieldDelegate
ke deklarasi kelas:Hubungkan
textfield
atau tulis itu secara terprogramatur view controller Anda sebagai delegasi bidang teks yang dilihat memuat:
Tambahkan fungsi berikut
dengan semua ini keyboard Anda akan mulai menghilang dengan menyentuh di luar bidang teks juga dengan menekan tombol kembali.
sumber
UITextFieldDelegate
... terima kasih banyak!Swift 4.2 - Tidak Perlu Delegasi
Anda dapat membuat outlet tindakan dari UITextField untuk " Tindakan Utama Dipicu " dan mengundurkan diri responden pertama pada parameter pengirim yang diteruskan:
Sangat sederhana.
(Terima kasih untuk video 60 detik Scott Smith untuk memberi tahu saya tentang ini: https://youtu.be/v6GrnVQy7iA )
sumber
Solusi Simple Swift 3: Tambahkan fungsi ini ke pengontrol tampilan Anda yang menampilkan bidang teks:
Kemudian buka asisten editor Anda dan pastikan kedua Main.storyboard Anda di satu sisi tampilan Anda dan file controller.swift tampilan yang diinginkan di sisi lain. Klik pada bidang teks dan kemudian pilih dari panel utilitas sisi kanan 'Tampilkan Inspektur Koneksi'. Kendalikan kontrol dari 'Did End on Exit' ke fungsi di atas dalam file cepat Anda. Ulangi untuk bidang teks lainnya di adegan itu dan tautkan ke fungsi yang sama.
sumber
@RSC
bagi saya tambahan penting dalam Xcode Versi 6.2 (6C86e) ada di
override func viewDidLoad()
Sudah mencoba membuatnya bekerja dengan kunci kembali selama berjam-jam sampai saya menemukan posting Anda, RSC. Terima kasih!
Juga, jika Anda ingin menyembunyikan keyboard jika Anda menyentuh tempat lain di layar:
sumber
Untuk mendapatkan pemberhentian keyboard otomatis, saya memasukkan kode ini ke dalam salah satu metode kelas bidang teks khusus saya:
Ganti nama outlet Anda dengan
textField
.sumber
mytextfield.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)
(versi Swift 5) ke dalamviewDidLoad
tetapi tidak kembali atau mengetuk suatu tempat di luar textfield bekerja. Saya mendapatkan bidang teks dengan membuat outlet masing-masing.viewDidAppear
metode kelas itu.UIAlertController.addTextField(configurationHandler: {(textField: UITextField!) in textField.delegate = self textField.addTarget(self, action: #selector(MySubclass.textChanged(_:)), for: .editingChanged) })
Ini mungkin agak terlalu spesifik untuk kasus saya, tetapi mudah-mudahan ini membantu. Coba lakukan panggilan di dalamviewDidAppear
dan sesuaikan dengan delegasi jika perlu.Cara lain untuk melakukan ini yang sebagian besar menggunakan storyboard dan dengan mudah memungkinkan Anda untuk memiliki beberapa bidang teks adalah:
Hubungkan semua bidang teks Anda untuk pengontrol tampilan ke tindakan pada
Did End On Exit
acara setiap bidang.sumber
Saya akan menyarankan untuk memulai Kelas dari RSC:
}
sumber
Saat pengguna mengetuk tombol Selesai pada papan ketik teks, acara Did End On Exit akan dihasilkan; pada saat itu, kita perlu memberi tahu bidang teks untuk menyerahkan kontrol sehingga keyboard akan hilang. Untuk melakukan itu, kita perlu menambahkan metode aksi ke kelas controller kita. Pilih ViewController.swift tambahkan metode tindakan berikut:
Pilih Main.storyboard di Project Navigator dan buka inspektur koneksi. Seret dari lingkaran di sebelah Did End On Exit ke ikon Yellow View Controller di storyboard dan lepaskan. Menu pop-up kecil akan muncul berisi nama tindakan tunggal, yang baru saja kita tambahkan. Klik tindakan textFieldDoneEditing untuk memilihnya dan hanya itu.
sumber
Inilah pembaruan Swift 3.0 untuk komentar peacetype:
sumber
Saya benci menambahkan fungsi yang sama ke setiap UIViewController. Dengan memperluas UIViewController untuk mendukung UITextFieldDelegate, Anda dapat memberikan perilaku default "kembali ditekan".
Saat Anda membuat UIViewController dan UITextField baru, yang harus Anda lakukan adalah menulis satu kode baris di UIViewController Anda.
Anda bahkan dapat menghilangkan kode satu baris ini dengan mengaitkan delegasi di Main.storyboard. (Menggunakan "ctrl" dan seret dari UITextField ke UIViewController)
sumber
Cepat 3
Tambahkan kode ini di bawah ini ke VC Anda
Bekerja untukku
sumber
Pastikan delegasi textField Anda disetel ke pengontrol tampilan tempat Anda menulis kode terkait bidang teks.
sumber
Cepat
Menggunakan fungsi opsional dari
UITextFieldDelegate
.false
berarti bidang itu dapat diminta untuk mengundurkan diri.true
- paksa mundur.sumber
maka Anda menggunakan fungsi ini
sumber
Anda dapat menempatkan ini di mana saja tetapi tidak dalam UIButton
maka Anda dapat meletakkan kode ini di tombol (juga misalnya):
ini berhasil untuk saya
sumber
Di pengontrol tampilan yang Anda gunakan:
sumber
Anda harus menghubungkan UITextfied dengan delegasi view controller untuk membuat fungsi ini dipanggil
sumber
All in One Sembunyikan Keyboard dan Pindahkan Tampilan pada Keyboard Buka: Swift 5
sumber