web-dev-qa-db-ja.com

カスタムUITextFieldクリアボタン

UITextFieldのクリアボタンの画像をカスタマイズすることは可能ですか?テキストフィールドの背景が暗いため、「x」が十分に表示されません。

33
gemini

テキストフィールドのrightViewプロパティに独自のカスタムクリアボタンを設定できます。 rightViewModeプロパティをUITextFieldViewModeWhileEditingまたはUITextFieldViewModeAlwaysに設定してください。これはあなたのケースにとって意味があります。

ボタンの位置がニーズに合わない場合は、UITextFieldをサブクラス化し、rightViewRectForBounds: 方法。

ドキュメントではclearButtonModeプロパティのデフォルトはUITextFieldViewModeNeverですが、Interface BuilderがUITextFieldViewModeWhileEditingに設定するのではないかと疑っています-「never」値に設定してください表示されません。

これらのプロパティはすべて ITextField Class Reference に記載されています。

50
Danra

KVOを使用してそのプロパティにアクセスできます。

UIButton *clearButton = [myTextField valueForKey:@"_clearButton"];
[clearButton setImage:[UIImage new] forState:UIControlStateNormal];
32
Laszlo

テスト済みのiOS7.0-8.4

次のUIAppearanceメソッドを使用して、すべてのクリアボタンのbackgroundImageを更新できます。残念ながら、ボタンの画像を更新することはできません。

UIButton *defaultClearButton = [UIButton appearanceWhenContainedIn:[UITextField class], nil];
[defaultClearButton setBackgroundImage:[UIImage imageNamed:@"clearButtonBkg1.png"] forState:UIControlStateNormal];

次の画像を使用すると、次のクリアボタンが表示されます。

白い背景画像@ 3x:

White clear button background

enter image description here

注:これにより、テキストフィールドに含まれるすべてのボタンの背景画像が更新されます

8
Brody Robertson

@Brody Robertsonの回答のSwift 2.2+/iOS 9+バージョン:

let defaultClearButton = UIButton.appearanceWhenContainedInInstancesOfClasses([UITextField.self])
defaultClearButton.setBackgroundImage(UIImage(named: "ClearIcon"), forState: UIControlState.Normal)
2
zgorawski

Swift

let customClearButton = UIButton.appearance(whenContainedInInstancesOf: [UITextField.self])
customClearButton.setBackgroundImage(UIImage(named: "custom_cb"), for: .normal)
1
Claus

@TussLászlóの answer に依存

Swift 3.0

myTextField.clearButtonMode = .whileEditing
if let clearButton = myTextField.value(forKeyPath: "_clearButton") as? UIButton {
    clearButton.setImage(UIImage(named:"myImage"), for: .normal)
    clearButton.setImage(UIImage(named:"myImage"), for: .highlighted)
}

しかし、実際には慎重に使用してください。 Apple将来のiOSリリースで実装を変更する場合、動作しません

1
Pavel Volobuev

1つの方法は、目的の画像をサブビューとして使用し、タップすると親テキストフィールドをクリアするカスタムUITextFieldを作成することです。デフォルトのボタンを無効にし、このカスタムテキストフィールドにカスタム動作を追加します。

これで開始できます。さらに具体的な質問がある場合は、軽微な問題であれば、ここで質問やコメントを自由に編集してください。

0