Saya menggunakan a UITextField
dengan UIPickerView
untuknya inputView
, sehingga ketika pengguna mengetuk bidang teks, seorang pemilih dipanggil untuk memilih opsi.
Hampir semuanya berfungsi, tapi saya punya satu masalah: kursor masih berkedip di bidang teks ketika sedang aktif, yang jelek dan tidak pantas, karena pengguna tidak diharapkan untuk mengetik ke lapangan dan tidak disajikan dengan keyboard. Saya tahu saya bisa memecahkan masalah ini dengan menyetel editing
ke NO
bidang teks dan melacak sentuhan di atasnya, atau dengan menggantinya dengan tombol gaya khusus, dan memanggil pemilih melalui kode. Namun, saya ingin menggunakan UITextFieldDelegate
metode untuk semua penanganan acara di bidang teks dan peretasan seperti mengganti bidang teks dengan tombol tidak mengizinkan pendekatan ini.
Bagaimana cara menyembunyikan kursor pada kursor UITextField
?
sumber
Pada iOS 7 Anda sekarang dapat hanya mengatur
tintColor = [UIColor clearColor]
pada TextField dan tanda sisipan akan hilang.sumber
caretRectForPosition:
solusi override.Anda bisa menghapus tintColor bidang teks
Swift 3.0
sumber
Anda mungkin juga ingin menghentikan pengguna dari memilih, menyalin atau menempelkan teks apa pun sehingga satu-satunya input teks berasal dari tampilan pemilih.
http://b2cloud.com.au/tutorial/disabling-the-caret-and-text-entry-in-uitextfields/
sumber
Check out properti
selectedTextRange
dari protokolUITextInput
, mana kelasUITextField
sesuai. Beberapa! Itu pelajaran dalam pemrograman berorientasi objek di sana.Sembunyikan Caret
Untuk menyembunyikan tanda sisipan, kosongkan rentang teks yang dipilih bidang teks.
Unhide Caret
Berikut adalah dua cara untuk menyembunyikan tanda sisipan.
Setel rentang teks bidang teks yang dipilih ke akhir dokumen.
Untuk menjaga tanda sisipan di tempat yang sama, pertama, simpan rentang teks yang dipilih bidang teks ke variabel instan.
Kemudian, ketika Anda ingin menyembunyikan tanda sisipan, cukup setel rentang teks yang dipilih bidang teks kembali ke yang semula:
sumber
caretRectForPosition
. Ini lebih eksplisit apa yang dilakukannya, dan dokumen yang Anda kutip tidak menjelaskan perilaku caret seharusnya ketika ada 'tidak ada pilihan saat ini'. Jika klaim @ ArtGeigel bahwa ini tidak berfungsi adalah benar (yang tidak, setidaknya sejauh yang saya bisa lihat) tidak akan jelas bahwa itu adalah bug.Jawaban diberikan oleh OP, disalin dari badan pertanyaan untuk membantu membersihkan pertanyaan yang tidak terjawab yang terus tumbuh.
Saya menemukan solusi lain: subclass
UIButton
dan menimpa metode iniSekarang tombol, sebagai
UIResponder
, memiliki perilaku yang miripUITextField
dan implementasi yang cukup mudah.sumber
UITextFieldDelegate
dengan ini untuk menangani acara penyuntingan mulai dan berakhir. Alih-alih - kecuali ada cara untuk menangani acara-acara yang tidak saya ketahui - Anda harus menggantibecomeFirstResponder
danresignFirstResponder
di subkelas tombol, dan mungkin membuat protokol delegasi Anda sendiri, menambahkandelegate
properti, dan memanggil delegasi dari yang disebutkan di atas. metode. Ini semua jauh lebih berhasil daripada hanya mengesampingkancaretRectForPosition
dalamUITextField
subkelas.UIResponder
referensi kelas sebelumnya, dan tidak tahu bahwa trik seperti ini dimungkinkan.UITextField
dan menyembunyikan kursor, yang pada dasarnya merupakan peretasan karena kita kemudian menggunakan bidang teks sebagai label sementara tidak menggunakan salah satu fungsi dariUITextField
.Versi cepat dari 5 posting Net
sumber
atur tintColor ke Clear Color
dan Anda juga dapat mengatur dari pembangun antarmuka
sumber
Jika Anda ingin menyembunyikan kursor, Anda dapat dengan mudah menggunakan ini! Itu bekerja untuk saya ..
sumber
Jawaban diberikan oleh OP, disalin dari badan pertanyaan untuk membantu membersihkan pertanyaan yang tidak terjawab yang terus tumbuh.
Saya pikir saya punya solusi yang benar tetapi jika itu dapat ditingkatkan akan diterima :) Yah, saya membuat subkelas dari UITextField dan mengganti metode yang mengembalikan CGRect untuk batas
Masalah? Teks tidak muncul karena kotak adalah nol. Tapi saya menambahkan UILabel sebagai subview dari kontrol dan menimpa metode setText sehingga, saat kita memasukkan teks seperti biasa, teks bidang teks nil dan merupakan label yang menunjukkan teks
Dengan ini masalahnya berfungsi seperti yang diharapkan. Apakah Anda tahu cara untuk memperbaikinya?
sumber
Untuk menonaktifkan kursor dan menu saya menggunakan subclass dengan 2 metode ini:
sumber
Saya cukup subkelas
UITextField
, dan menimpalayoutSubviews
sebagai berikut:Ini peretasan yang kotor, dan mungkin gagal di masa mendatang (saat itu kursor akan terlihat lagi - aplikasi Anda tidak akan macet), tetapi itu berfungsi.
sumber
Anda dapat menambahkan
BOOL cursorless
properti keUITextField
dalam kategori melalui objek terkait.Kemudian gunakan metode swizzling untuk swizzle
caretRectForPosition:
dengan metode yang beralih antaraCGRectZero
dan menggunakan nilai defaultnyacursorless
.Ini mengarah ke antarmuka sederhana melalui kategori drop-in. Ini ditunjukkan dalam file-file berikut.
Cukup masukkan mereka dan dapatkan manfaat dari antarmuka sederhana ini
UITextField
kategori: https://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless.h https://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless .mMetode Swizzling: https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.h https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject% 2BRXRuntimeAdditions.m
sumber