変更UITextFieldの背景編集が始まります
-
22-09-2019 - |
質問
私はそれはそれはに似フォーカス、持っていることをユーザーに示すために、firstResponderになったときのUITextFieldの背景画像を変更したい:アクティブまたは:CSSでフォーカス擬似クラスを
私はプログラム的にこれを行う必要があるかもしれない推測しています。任意のヘルプは大歓迎されてます。
-Giles
解決
あなたにも(キーと値のオブザーバーよりも維持するために、より簡単に私見)UITextFieldDelegateメソッドを使用する場合があります:
#pragma mark -
#pragma mark UITextFieldDelegate methods
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
_field.background = [UIImage imageNamed:@"focus.png"];
return YES;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
_field.background = [UIImage imageNamed:@"nofocus.png"];
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
UITextField.borderStyleプロパティは任意の型であるが、UITextBorderStyleRoundedRect(その場合には、backgroundプロパティを考慮しない)ときこれはのみ動作します。あなたがUITextBorderStyleBezel、UITextBorderStyleLineとUITextBorderStyleNoneで上記のコードを使用する場合があります。この手段は、などのborderStyleドキュメントで説明します:
のborderStyle
テキストフィールドで使用される境界線のスタイル。
@property(アトミック)UITextBorderStyleのborderStyle
ディスカッション
このプロパティのデフォルト値は UITextBorderStyleNone。カスタムの場合 背景画像は、このプロパティを設定されています 無視されます。
このはUITextFieldののbackgroundプロパティのドキュメントです。
背景
表す画像 テキストの背景の外観 フィールドが有効になっているときます。
@property(保持、非アトミック)UIImage *背景
ディスカッション
セット、画像によって参照このプロパティは、標準を置き換えます 外観で制御 borderStyleプロパティ。バックグラウンド 画像はボーダーで描画されています 画像の矩形部分。画像 あなたは、テキストフィールドのために使用します 背景には、ストレッチすることができるはずです フィット感に。
他のヒント
クリーンな方法私見では、テキストフィールドの背景画像を変更するには、サブクラスUITextField
とオーバーライドbecomeFirstResponder
とresignFirstResponder
にあります。そうすれば、あなたは背景を変更するデリゲートメソッドを再実装することなく、あなたの新しいサブクラスのどこかを使用することができます。
- (BOOL)becomeFirstResponder {
BOOL outcome = [super becomeFirstResponder];
if (outcome) {
self.background = // selected state image;
}
return outcome;
}
- (BOOL)resignFirstResponder {
BOOL outcome = [super resignFirstResponder];
if (outcome) {
self.background = // normal state image;
}
return outcome;
}
の SWIFT 4 の
textField.addTarget(self, action: #selector(anyFunction), for: UIControlEvents.editingDidBegin)
@objc func anyFunction() {
// Add your conde here
}
あなたはおそらくisFirstResponderへの変更を観察してみてください。そして、通知方法で背景を変更します。ような何かます:
[textField addObserver:theObserver forKeyPath:@"isFirstResponder" options:0 context:nil];
そして、オブザーバーでます:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if(object == textField && [keyPath isEqual:@"isFirstResponder"]) {
//fiddle with object here
}
}