IOSのUITextField
(および同じ答えの場合はUITextView
)でカーソル/キャレットの色を変更することについて疑問に思っています。 OSX開発の回答を見ましたが、iOSの回答はありません。
これも可能ですか?
IOS 7以降をターゲットにしている場合、これははるかに簡単になりました。外観プロキシを使用してカーソルでフィールドのtintColorを変更するだけで、アプリ全体に適用されます。
Swift 3.0:
UITextField.appearance().tintColor = .black
Objective-C:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
同じ答えが個々のUITextViewに適用されます。
Swift 3.0:
myTextField.tintColor = .black
Objective-C
[myTextField setTintColor:[UIColor blackColor]];
IOS7では、textFieldのtintColorを簡単に変更できます
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
注:この回答は古くなっており、iOS 7以前の開発にのみ使用する必要があります。iOS7の外観プロキシを使用した1行ソリューションの他の回答を参照してください
私が取り組んでいたプロジェクトで同じ問題に直面した後、私はこの質問にたどり着きました。
既存のプライベートAPIを使用しないため、AppStoreレビューチームに受け入れられるソリューションを作成できました。
UITextFieldを拡張するDGTextFieldというコントロールを作成しました。
yourTextField.tintColor = [UIColor whiteColor];
コードでそれを設定すると動作します、 'cosなんとかインターフェイスビルダーではカラートリガーは行いません(Xcode 6.1.1)。外観プロキシを変更する必要なく、適切に適合しました。
tintColor
とUITextField
にUITextView
を設定すると、動作が異なります。 UITextField
の場合、カーソルの色を変更するためにtintColor
を更新した後に追加のコードを呼び出す必要はありませんが、UITextView
の場合は必要です。
したがって、tintColor
にUITextView
を設定した後(IBでもコードでも問題ありません)、適用するためにtextView.tintColorDidChange()
を呼び出す必要があります(実際には、テキストビューの構成をそのサブビュー階層に渡します)。
これはSwiftで私のために働いた:
UITextField.tintColor = UIColor.blackColor()
ストーリーボードでこれを設定することもできます: https://stackoverflow.com/a/18759577/307534
より一般的なアプローチは、UIViewの外観のtintColorを設定することです。
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
多くのデフォルトUI要素を使用している場合に意味があります。
試してみてください、私のために働いています。
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
プライベートプロパティにアクセスすることによってのみ可能です。したがって、Apple AppStoreアプリが拒否される可能性があります。
スイフト4
ViewDidLoad()では、次のコードを呼び出すだけです。
コードサンプル
//txtVComplaint is a textView
txtVComplaint.tintColor = UIColor.white
txtVComplaint.tintColorDidChange()
Durgeshのアプローチは機能します。
また、このようなKVCソリューションを何度も使用しました。それは文書化されていないようですが、動作します。率直に言って、ここではプライベートメソッドを使用しません。合法なKey-Valueコーディングのみを使用します。
追伸昨日、私の新しいアプリはこのアプローチで問題なくAppStoreに登場しました。また、いくつかの読み取り専用プロパティ(navigatonBarなど)またはプライベートivarを変更する際にKVCを使用するのは初めてではありません。
カスタムカラーが必要な場合は、Assets.xcassets
フォルダーに移動し、右クリックして[New Color Set
]を選択します。一度作成したカラーを作成したら、名前を付けて再利用します。
そして、次のように使用できます。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME") #here
}
}
MacOS 10.15/iOS 13/Swift 5でテスト済み
Swiftを使用したInterface Builderバージョンの場合
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
UITextField
がUISearchBar
からのものである場合、最初にtextField
からsearchBar
を取得してから、tintColor
プロパティを適用します。
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray