テキストをクリアするUITextFieldの右側に小さな「X」ボタンをどのように追加しますか?iPhone OS 2.2 SDKのInterface Builderでこのサブコントロールを追加するための属性が見つかりません。
注: Xcode 4.x以降(iPhone 3.0 SDK以降)では、これをInterface Builderで実行できます。
テキストをクリアするUITextFieldの右側に小さな「X」ボタンをどのように追加しますか?iPhone OS 2.2 SDKのInterface Builderでこのサブコントロールを追加するための属性が見つかりません。
注: Xcode 4.x以降(iPhone 3.0 SDK以降)では、これをInterface Builderで実行できます。
回答:
このボタンは、UITextField
クラスによって提供される組み込みのオーバーレイですが、iOS 2.2 SDKの時点では、Interface Builderを介して設定する方法はありません。プログラムで有効にする必要があります。
次のコード行をどこかに追加します(viewDidLoad
たとえば)。
Objective-C
myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;
Swift 5.0
myUITextField.clearButtonMode = .whileEditing
Swift 4以降:
textField.clearButtonMode = UITextField.ViewMode.whileEditing
またはさらに短い:
textField.clearButtonMode = .whileEditing
カスタムクリアボタンを追加し、これを使用してサイズとすべてのものを制御できます。
UIButton *clearButton = [UIButton buttonWithType:UIButtonTypeCustom];
[clearButton setImage:img forState:UIControlStateNormal];
[clearButton setFrame:frame];
[clearButton addTarget:self action:@selector(clearTextField:) forControlEvents:UIControlEventTouchUpInside];
textField.rightViewMode = UITextFieldViewModeAlways; //can be changed to UITextFieldViewModeNever, UITextFieldViewModeWhileEditing, UITextFieldViewModeUnlessEditing
[textField setRightView:clearButton];
Swift 4(Kristopher Johnsonの回答からの抜粋)
textfield.clearButtonMode = .always
textfield.clearButtonMode = .whileEditing
textfield.clearButtonMode = .unlessEditing
textfield.clearButtonMode = .never
func clear_btn(box_is : UITextField){
box_is.clearButtonMode = .always
if let clearButton = box_is.value(forKey: "_clearButton") as? UIButton {
let templateImage = clearButton.imageView?.image?.withRenderingMode(.alwaysTemplate)
clearButton.setImage(templateImage, for: .normal)
clearButton.setImage(templateImage, for: .highlighted)
clearButton.tintColor = .white
}
}