Saya bertanya-tanya tentang mengubah warna kursor / tanda sisipan di UITextField
(Dan UITextView
jika jawabannya sama) di iOS. Saya telah melihat jawaban untuk pengembangan OSX, tetapi tidak ada untuk iOS.
Apakah ini mungkin?
Saya bertanya-tanya tentang mengubah warna kursor / tanda sisipan di UITextField
(Dan UITextView
jika jawabannya sama) di iOS. Saya telah melihat jawaban untuk pengembangan OSX, tetapi tidak ada untuk iOS.
Apakah ini mungkin?
Jawaban:
Jika Anda menargetkan iOS 7+, ini menjadi lebih mudah. Cukup ganti tintColor
bidang dengan kursor menggunakan proxy penampilan dan itu akan berlaku di seluruh aplikasi:
Swift 3.0:
UITextField.appearance().tintColor = .black
Tujuan-C:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
Jawaban yang sama berlaku untuk seorang individu UITextField
:
Swift 3.0:
myTextField.tintColor = .black
Objektif-C
[myTextField setTintColor:[UIColor blackColor]];
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
Catatan: Jawaban ini kedaluwarsa dan harus digunakan hanya untuk pengembangan pra-iOS 7. Lihat jawaban lain untuk solusi 1 baris menggunakan proksi penampilan di iOS 7.
Saya sampai pada pertanyaan ini setelah saya menghadapi masalah yang sama dalam proyek yang sedang saya kerjakan.
Saya berhasil membuat solusi yang akan diterima oleh tim peninjau AppStore karena tidak menggunakan API Pribadi apa pun yang ada.
Saya telah membuat kontrol yang disebut DGTextField yang memperluas UITextField.
yourTextField.tintColor = [UIColor whiteColor];
Ini berfungsi jika Anda mengaturnya dalam kode, karena entah bagaimana pemicu warna tidak melakukannya di Interface Builder (Xcode 6.1.1). Ini cocok dengan baik tanpa perlu mengubah proxy penampilan.
Pengaturan tintColor
untuk UITextField
dan UITextView
bekerja secara berbeda. Sedangkan untuk UITextField
Anda tidak perlu memanggil kode tambahan setelah memperbarui tintColor
untuk mengubah warna kursor, tetapi untuk UITextView
Anda perlu.
Jadi setelah pengaturan tintColor
untuk UITextView
(tidak masalah dalam IB atau dalam kode) Anda perlu menelepon textView.tintColorDidChange()
untuk menerapkannya (sebenarnya itu akan meneruskan konfigurasi tampilan teks ke hierarki tampilan bawahnya).
Ini berhasil bagi saya dengan cepat:
UITextField.tintColor = UIColor.blackColor()
Anda juga dapat mengatur ini di storyboard: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
Pendekatan yang lebih umum adalah dengan mengatur tintColor penampilan UIView.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Masuk akal jika Anda menggunakan banyak elemen UI default.
[UIView appearance]
Hanya dimungkinkan dengan mengakses properti pribadi dan karenanya dapat menyebabkan penolakan aplikasi Apple AppStore.
Pendekatan Durgesh berhasil.
Saya juga menggunakan solusi KVC seperti itu berkali-kali. Meskipun tampaknya tidak berdokumen, tetapi berhasil. Terus terang, Anda tidak menggunakan metode pribadi apa pun di sini - hanya Kode-Nilai Kunci yang sah.
PS Kemarin aplikasi baru saya muncul di AppStore tanpa masalah dengan pendekatan ini. Dan ini bukan kasus pertama ketika saya menggunakan KVC dalam mengubah beberapa properti read-only (seperti navigatonBar) atau ivars pribadi.
Untuk versi Interface Builder dengan Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
Jika UITextField
dari UISearchBar
maka pertama dapatkan textField
dari searchBar
dan kemudian terapkan tintColor
properti:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
Saya pikir. Jika Anda menginginkan beberapa warna kustom, Anda dapat pergi ke Assets.xcassets
folder, klik kanan dan pilih New Color Set
, setelah Anda membuat warna yang Anda atur, berikan nama untuk menggunakannya kembali.
Dan Anda dapat menggunakannya seperti ini:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME") #here
}
}
Diuji pada macOS 10.15 / iOS 13 / Swift 5
UITextField
, termasuk bagaimana melakukan ini di Interface Builder, di stackoverflow.com/a/18759577/1709587