質問

私はそれはそれはに似フォーカス、持っていることをユーザーに示すために、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とオーバーライドbecomeFirstResponderresignFirstResponderにあります。そうすれば、あなたは背景を変更するデリゲートメソッドを再実装することなく、あなたの新しいサブクラスのどこかを使用することができます。

- (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
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top