Tidak ada tombol "Selesai" pada papan nomor. Ketika pengguna selesai memasukkan informasi numerik dalam bidang teks, bagaimana saya bisa membuat pad nomor menghilang?
Saya bisa mendapatkan tombol "Selesai" dengan menggunakan keyboard default, tetapi kemudian pengguna harus beralih ke tombol angka untuk memasukkan angka. Apakah ada cara untuk menunjukkan tombol "Selesai" pada papan nomor?
ios
iphone
user-input
Zhong Dingin
sumber
sumber
Berikut ini adalah adaptasi untuk jawaban Luda untuk Swift:
Dalam deklarasi put subclass UIViewController Anda
di ViewDidLoad put:
dan tambahkan fungsi hoopla dan hoopla (jangan ragu untuk memilih nama lain, cukup ubah nama pemilih di ViewDidLoad sesuai
sumber
UIBarButtonItemStyle.Bordered
sudah ditinggalkan sejak iOS 8.0.UIBarButtonItemStyle.Plain
disarankan sebagai gantinya.Trik yang pernah saya lihat digunakan adalah untuk membuat tombol transparan transparan ukuran seluruh tampilan dan kemudian dalam metode klik, memiliki bidang teks mengundurkan diri responden pertama. Jadi pengguna dapat mengklik di mana saja di luar lapangan untuk mengabaikan keypad.
sumber
Solusi Swift 3 menggunakan ekstensi. Ideal jika Anda memiliki beberapa
UITextField
objek numerik di aplikasi Anda karena memberikan fleksibilitas untuk memutuskan, untuk masing-masingUITextField
, apakah akan melakukan tindakan kustom ketika Selesai atau Batal disadap.Contoh penggunaan menggunakan tindakan default:
Contoh penggunaan menggunakan tindakan Selesai kustom :
sumber
Di bawah ini adalah perombakan jawaban Luda dengan perubahan berikut:
tampilan aksesori secara otomatis berukuran sesuai dengan lebar bingkai aplikasi
konstanta yang sudah usang
UIBarButtonItemStyleBordered
dihindaritombol "Selesai" dipakai sebagai
UIBarButtonSystemItemDone
Saat ini tombol "Selesai" berpusat di tampilan aksesori. Anda dapat memposisikannya di kiri atau kanan dengan menghapus spasi di sisi yang bersangkutan.
Saya telah menghilangkan tombol "Batal" karena keyboard default juga tidak memilikinya. Jika Anda menginginkan tombol "Batal", saya sarankan Anda membuat instantiate sebagai
UIBarButtonSystemItemCancel
dan Anda memastikan Anda tidak membuang nilai asli di bidang teks Anda. Perilaku "Batalkan" yang diterapkan dalam jawaban Luda, yang menimpa nilai dengan string kosong, mungkin bukan yang Anda inginkan.Untuk informasi lebih lanjut tentang membangun tampilan aksesori, lihat dokumentasi Apple pada tampilan kustom untuk input data . Anda mungkin ingin melihat halaman referensi di UIToolbar dan UIBarButtonItem juga.
sumber
[UIScreen mainScreen].applicationFrame
tidak digunakan lagi di iOS 9. Gunakan[UIScreen mainScreen].bounds
Solusi di UIKeyboardTypeNumberPad dan tombol kembali yang hilang berfungsi dengan baik tetapi hanya jika tidak ada bidang teks pad non-angka lainnya di layar.
Saya mengambil kode itu dan mengubahnya menjadi UIViewController yang dapat Anda gunakan untuk membuat subclass agar nomor berfungsi. Anda harus mendapatkan ikon dari tautan di atas.
NumberPadViewController.h:
dan NumberPadViewController.m:
Nikmati.
sumber
Ini kode terbaru. Cukup sertakan #import "UIViewController + NumPadReturn.h" di viewController Anda.
Ini adalah .h
Dan mereka
sumber
Solusi yang jauh lebih mudah
sumber
Jika Anda memiliki beberapa bidang numerik, saya sarankan subclassing UITextField untuk membuat NumericTextField yang selalu menampilkan keyboard numerik dengan tombol selesai. Kemudian, cukup kaitkan bidang numerik Anda dengan kelas ini di Interface Builder dan Anda tidak akan memerlukan kode tambahan di Pengontrol Tampilan apa pun. Berikut ini adalah kelas Swift 3.0 yang saya gunakan di Xcode 8.0.
Cepat 4.2
sumber
Saya menemukan jawaban @ user1258240 cukup ringkas mengingat ini tidak sesederhana mengatur
returnKeyType
properti.Hanya ingin menyumbangkan pendekatan "dapat digunakan kembali" saya sendiri untuk ini:
sumber
SWIFT 3.0 Rasa yang berbeda, menggunakan bagian dari beberapa jawaban sebelumnya.
sumber
Saya menjelaskan satu solusi untuk iOS 4.2+ di sini, tetapi tombol pemberhentian memudar setelah keyboard muncul. Ini tidak buruk, tetapi juga tidak ideal.
Solusi yang dijelaskan dalam pertanyaan yang ditautkan di atas termasuk ilusi yang lebih elegan untuk menghilangkan tombol, di mana saya pudar dan secara vertikal memindahkan tombol untuk memberikan tampilan bahwa tombol dan tombol saling lepas.
sumber
Cara paling sederhana adalah:
Buat tombol transparan transparan dan letakkan di sudut kiri bawah, yang akan sama
CGSize
dengan ruang kosong diUIKeyboardTypeNumberPad
. Beralih (tampilkan / sembunyikan) tombol ini di textFieldbecomeFirstResponder
, klik tombol masing-masing.sumber
Inilah solusi paling sederhana yang saya temui. Saya telah mempelajari ini dari buku Pengembangan Beginning iOS 5.
Dengan asumsi bidang angka disebut
numberField
.Di
ViewController
, tambahkan metode berikut:Di
ViewController.m
, tambahkan kode berikut:Kembali ke
nib
file.Utilities
panciIdentity inspector
bawahUtilities
.View
(dalam file nib) sekali. Pastikan Anda belum mengklik salah satu item dalam tampilan. Demi klarifikasi, Anda harus melihat UIViewClass
di bawahIdentity inspector
.Connection Inspector
.Touch Down
dan jatuhkan panah padaFile Owner
ikon. (FYI ... Ikon Pemilik File ditampilkan di sebelah kiriView
dan muncul sebagai kubus berongga dengan bingkai kuning.)closeKeyboard
.Sekarang ketika Anda mengklik di mana saja pada latar belakang
View
, Anda harus dapat mengabaikan keyboard.Semoga ini bisa membantu Anda memecahkan masalah Anda. :-)
sumber
Saya memodifikasi solusi Bryan menjadi sedikit lebih kuat, sehingga akan cocok dengan jenis keyboard lain yang bisa muncul dalam tampilan yang sama. Dijelaskan di sini:
Buat tombol DILAKUKAN pada papan tombol papan ketik iOS
Saya akan mencoba menjelaskannya di sini, tetapi sebagian besar adalah kode untuk dilihat yang tidak mudah masuk di sini
sumber
Jika Anda tahu sebelumnya jumlah nomor yang harus dimasukkan (misalnya PIN 4 digit), Anda dapat memberhentikan otomatis setelah 4 tombol ditekan, sesuai jawaban saya untuk pertanyaan serupa:
menolak Number Pad
Tidak perlu tombol selesai dilakukan dalam kasus ini.
sumber
Kami juga dapat membuat solusi "pengguna menyentuh tempat lain" menjadi lebih mudah jika kami hanya memberi tahu pandangan pengontrol tampilan kami untuk mengakhiri pengeditan:
... dengan asumsi bahwa "menyentuh tempat lain mengabaikan keyboard" adalah perilaku yang diinginkan untuk bidang yang dapat diedit lainnya pada tampilan juga.
sumber
Untuk Swift 2.2 saya menggunakan ini
sumber
Semua implementasi tentang menemukan tampilan keyboard dan menambahkan tombol selesai di baris ke-3 (itulah sebabnya button.y = 163 b / c ketinggian keyboard adalah 216) rapuh karena iOS terus mengubah hierarki tampilan. Misalnya tidak ada kode di atas yang berfungsi untuk iOS9.
Saya pikir lebih aman untuk hanya menemukan tampilan teratas, dengan [[[UIAplikasi sharedApplication] windows] lastObject], dan cukup tambahkan tombol di sudut kiri bawahnya, dilakukanButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53); // mode potret
sumber
Swift 2.2 / Saya menggunakan jawaban Dx_. Namun, saya menginginkan fungsi ini di semua keyboard. Jadi di kelas dasar saya memasukkan kode:
Kemudian panggil addDoneButtonForTextFields di self.view.subviews dalam viewDidLoad (atau willDisplayCell jika menggunakan tampilan tabel) untuk menambahkan tombol Done ke semua keyboard.
sumber