Saya ingin mengubah warna teks placeholder yang saya atur di UITextField
kontrol saya , untuk membuatnya hitam.
Saya lebih suka melakukan ini tanpa menggunakan teks normal sebagai placeholder dan harus mengganti semua metode untuk meniru perilaku placeholder.
Saya percaya jika saya mengganti metode ini:
- (void)drawPlaceholderInRect:(CGRect)rect
maka saya harus bisa melakukan ini. Tapi saya tidak yakin cara mengakses objek placeholder sebenarnya dari dalam metode ini.
ios
uitextfield
adam
sumber
sumber
attributedPlaceholder
kata yang menggunakan atribut teks, kecuali untuk warna.[[NSAttributedString alloc] initWithString:@"placeholder" attributes: @{NSForegroundColorAttributeName: color, NSFontAttributeName : font}];
[<UITextField 0x11561d90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _field.
Mudah dan tanpa rasa sakit, bisa menjadi alternatif yang mudah bagi sebagian orang.
Tidak disarankan untuk diproduksi, Apple dapat menolak kiriman Anda.
sumber
_placeholderLabel
adalah properti pribadi. Solusi ini dapat ditolak untuk penggunaan API pribadi.Anda dapat mengesampingkan
drawPlaceholderInRect:(CGRect)rect
untuk merender teks placeholder secara manual:sumber
[self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
mungkin lebih baik. Dengan begitu Anda akan menghormatitextAlignment
properti. Saya telah menambahkan ini ke kelas SSTextField saya . Jangan ragu untuk menggunakannya dalam proyek Anda.Anda bisa mengubah warna teks Placeholder ke warna apa pun yang Anda inginkan dengan menggunakan kode di bawah ini.
sumber
Mungkin Anda ingin mencoba cara ini, tetapi Apple mungkin memperingatkan Anda tentang mengakses private ivar:
CATATAN
Ini tidak lagi berfungsi pada iOS 7, menurut Martin Alléus.
sumber
Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug
😈Ini berfungsi di Swift <3.0:
Diuji di iOS 8.2 dan iOS 8.3 beta 4.
Swift 3:
Swift 4:
Swift 4.2:
sumber
Dalam Swift:
Dalam Swift 4.0:
sumber
Swift 3.0 + Storyboard
Untuk mengubah warna placeholder di storyboard, buat ekstensi dengan kode berikutnya. (jangan ragu untuk memperbarui kode ini, jika Anda pikir, ini bisa menjadi lebih jelas dan aman)
Versi Swift 4
Versi Swift 5
sumber
NSAttributedStringKey
.Berikut ini hanya dengan iOS6 + (seperti yang ditunjukkan dalam komentar Alexander W):
sumber
Saya sudah menghadapi masalah ini. Dalam kasus saya, kode di bawah ini benar.
Tujuan C
Untuk Swift 4.X
Untuk iOS 13 Swift Code
Anda juga dapat menggunakan kode di bawah ini untuk iOS 13
Semoga ini bisa membantu Anda.
sumber
viewWillAppear
atauviewDidAppear
.viewDidLoad
terlalu dini.Dengan ini kita bisa mengubah warna teks placeholder textfield di iOS
sumber
Mengapa Anda tidak menggunakan
UIAppearance
metode saja:sumber
Juga di storyboard Anda, tanpa satu baris kode
sumber
dalam 3.X cepat
dalam cepat 5
sumber
Untuk iOS 6.0 +
Semoga ini bisa membantu.
Catatan: Apple dapat menolak (kemungkinan 0,01%) aplikasi Anda karena kami mengakses API pribadi. Saya menggunakan ini di semua proyek saya sejak dua tahun, tetapi Apple tidak meminta ini.
sumber
terminating with uncaught exception of type NSException
for iOS8Untuk pengembang Xamarin.iOS, saya menemukannya dari dokumen ini https://developer.xamarin.com/api/type/Foundation.NSAttributedString/
sumber
new NSAttributedString("placeholderstring", new CTStringAttributes() { ForegroundColor = UIColor.Blue.CGColor });
Versi cepat. Mungkin itu akan membantu seseorang.
sumber
Kategori FTW. Dapat dioptimalkan untuk memeriksa perubahan warna yang efektif.
sumber
Untuk menangani perataan vertikal dan horizontal serta warna placeholder di iOS7. drawInRect dan drawAtPoint tidak lagi menggunakan konteks saat ini fillColor.
https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html
Obj-C
sumber
iOS 6 dan penawaran kemudian
attributedPlaceholder
padaUITextField
. iOS 3.2 dan yang lebih baru menawarkansetAttributes:range:
padaNSMutableAttributedString
.Anda dapat melakukan hal berikut:
sumber
Solusi ini untuk Swift 4.1
sumber
Mengganti
drawPlaceholderInRect:
adalah cara yang benar, tetapi tidak berfungsi karena ada bug di API (atau dokumentasi).Metode tidak pernah dipanggil pada
UITextField
.Lihat juga drawTextInRect di UITextField tidak dipanggil
Anda mungkin menggunakan solusi digdog. Karena saya tidak yakin apakah itu dapat melewati tinjauan Apel, saya memilih solusi yang berbeda: Overlay bidang teks dengan label saya sendiri yang meniru perilaku placeholder.
Ini agak berantakan. Kode terlihat seperti ini (Catatan saya melakukan ini di dalam subkelas TextField):
sumber
Saya baru mengenal xcode dan saya menemukan jalan keluar untuk efek yang sama.
Saya menempatkan uilabel sebagai ganti place holder dengan format yang diinginkan dan menyembunyikannya
Saya setuju ini merupakan solusi dan bukan solusi nyata tetapi efeknya sama dengan mendapatkannya dari tautan ini
CATATAN: Masih berfungsi di iOS 7: |
sumber
Swift 5 DENGAN CAVEAT.
Peringatan adalah bahwa Anda HARUS memasukkan non-kosong di
String
mana "DON'T_DELETE" adalah, bahkan jika string itu diatur dalam kode di tempat lain. Mungkin menghemat lima menit head-sctratching.sumber
Yang terbaik yang bisa saya lakukan untuk iOS7 dan lebih sedikit adalah:
sumber
Bagi mereka yang menggunakan Monotouch (Xamarin.iOS), inilah jawaban Adam, diterjemahkan ke C #:
sumber
Font
properti bidang teks.Saya perlu menjaga penyelarasan placeholder sehingga jawaban Adam tidak cukup bagi saya.
Untuk mengatasi ini saya menggunakan variasi kecil yang saya harap akan membantu beberapa dari Anda juga:
sumber
UILineBreakModeTailTruncation
sudah tidak berlaku lagi di iOS 6.sumber
Untuk mengatur Placeholder Textfield Atribut dengan Banyak warna,
Cukup tentukan Teks,
Output: -
sumber
Opsi lain yang tidak memerlukan subklasifikasi - biarkan placeholder kosong, dan letakkan label di atas tombol edit. Kelola label seperti halnya Anda akan mengelola placeholder (membersihkan setelah pengguna memasukkan apa pun ..)
sumber