Saya membuat UITextField
yang memiliki UIPickerView
as inputView
. Semuanya bagus, kecuali saya dapat mengedit dengan menyalin, menempel, memotong dan memilih teks, dan saya tidak menginginkannya. Hanya Picker yang harus mengubah bidang teks.
Saya telah belajar bahwa saya dapat menonaktifkan pengeditan dengan mengatur setEnabled
atau setUserInteractionEnabled
ke NO
. Oke, tapi BidangTeks berhenti merespons sentuhan dan alat pilih tidak muncul.
Apa yang dapat saya lakukan untuk mencapainya?
ios
uitextfield
uipickerview
Luiz de Prá
sumber
sumber
Terjemahkan jawaban Nick menjadi cepat:
P / S: Return false => bidang teks tidak dapat dimasukkan, diedit dengan keyboard. Itu hanya dapat mengatur teks dengan kode.EX: textField.text = "My String Here"
sumber
Ini akan menjadi yang paling sederhana dari semuanya:
di viewDidLoad: (setel delegasi hanya untuk bidang teks yang seharusnya tidak dapat diedit.
dan masukkan fungsi delegasi ini:
Itu dia!
sumber
UIPickerView
perilaku dari metode delegasi itu, itu bekerja dengan baik.Dalam 3+ cepat:
sumber
Akan lebih elegan untuk membuat subkelas khusus
UITextField
yang mengembalikanNO
semua panggilan kecanPerformAction:withSender:
(atau setidaknya di manaaction
ada@selector(cut)
atau@selector(paste)
), seperti yang dijelaskan di sini .Selain itu, saya juga mengimplementasikan - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) string sesuai saran Nick untuk menonaktifkan teks input dari keyboard Bluetooth.
sumber
canPerformAction
danshouldChangeCharactersInRange
metode tidak pernah dipanggil.Cukup tempatkan UIButton tepat di atas seluruh UITextField tanpa teks Label yang membuatnya "tidak terlihat". Tombol ini dapat menerima dan mendelegasikan sentuhan daripada Textfield dan konten TextField masih terlihat.
sumber
Di Swift:
sumber
Saya menggunakan solusi yang disediakan oleh MrMage. Satu-satunya hal yang saya tambahkan adalah Anda harus mengundurkan diri UITextView sebagai responden pertama, jika tidak Anda terjebak dengan teks yang dipilih.
Ini kode swift saya:
sumber
Untuk alternatif yang menangani UIPickerView dan Action Sheets, periksa ActionSheetPicker
https://github.com/TimCinel/ActionSheetPicker
Ini cocoapods diaktifkan. Ini menangani semua tombol batal dan selesai pada Lembar Tindakan. Contoh dalam proyek sampel sangat bagus. Saya memilih ActionSheetStringPicker, yang menangani dengan mudah hanya opsi berbasis String, tetapi API dapat menangani hampir semua hal yang dapat saya pikirkan.
Saya awalnya memulai solusi seperti jawaban yang dicentang, tetapi tersandung ke proyek ini dan membutuhkan waktu sekitar 20 menit untuk mengintegrasikan hal-hal ke dalam aplikasi saya untuk digunakan termasuk menggunakan cocopods: ActionSheetPicker (~> 0.0)
Semoga ini membantu.
Unduh proyek git dan lihat kelas-kelas berikut:
Berikut ini kira-kira sebagian besar kode yang saya tambahkan, ditambah impor * .h.
sumber
Untuk mencegah pengeditan UITextField saat menggunakan UIPickerView untuk memilih nilai (di Swift):
sumber
Solusi ini berhasil. Letakkan UIView transparan di atas bidang teks dan terapkan kode berikut:
sumber
Buat inputView Anda disajikan oleh bidang teks tersembunyi yang juga mengubah teks yang disajikan dan yang dinonaktifkan.
sumber
Saya menggunakan:
dan bekerja dengan baik
sumber
Ini berhasil bagi saya
[textview setEditable:NO];
. Jawaban di atas terlalu memperumit situasi.sumber