現在、デフォルトのテキストを含むUITextFieldがあり、編集の開始時にクリアするように設定されています。編集が行われたときにフィールドが空またはnilの場合、テキスト値が再びデフォルトのテキストになるようにしようとしています。編集が行われたとき、またはキーボードが閉じられたときの検出に問題があります。使用したい検出方法とその実装方法を教えてもらえますか?本当にありがとう!
編集
私の場合、 Aplaceholder
は使用できません
現在、デフォルトのテキストを含むUITextFieldがあり、編集の開始時にクリアするように設定されています。編集が行われたときにフィールドが空またはnilの場合、テキスト値が再びデフォルトのテキストになるようにしようとしています。編集が行われたとき、またはキーボードが閉じられたときの検出に問題があります。使用したい検出方法とその実装方法を教えてもらえますか?本当にありがとう!
私の場合、 Aplaceholder
は使用できません
テキストフィールドデリゲートを使用する必要があります
-(void)textFieldDidEndEditing:(UITextField *)textField;
このデリゲートでこのようにチェックしてください
if ( [textField.text length] == 0 )
{
// the text field is empty do your work
} else {
/// the text field is not empty
}
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
if (range.location == 0 && string.length == 0)
{
//textField is empty
}
return YES;
}
「デフォルトのテキスト」を自分で処理する必要はないと思います。クラスplaceholder
のプロパティを確認してください。UITextField
アップデート
だからplaceholder
あなたの場合には良くありません。UITextFieldDelegate
のメソッドを実装してUITextField
、テキストを変更しようとしましたtextViewDidEndEditing:
か?
これを行うにUITextFieldDelegate
は、View Controllerでシナリオに役立つと思われるメソッドを実装し、View Controllerに設定delegate
しますUITextField
(Interface Builderまたはプログラムによる)。メソッドにデフォルトのテキストを設定しますtextViewDidEndEditing:
。
iOS用テキスト、Web、および編集プログラミングガイドの「入力されたテキストの取得とテキストの設定」セクションを参照できます。
テキストフィールドが戻ったときにデリゲート呼び出しを受け取ったら、sender
パラメータを使用してテキスト()をチェックし、それがデフォルトのテキストsender.text
を設定するのと等しいかどうかを確認します。@""
私は2つのアプローチを使用します。私の選択は、アプリケーションのビジネスロジックによって異なります。
1)変更を適用した後、結果のテキストを確認しますshouldChangeCharactersIn
:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
var text = textField.text ?? ""
let startIndex = text.index(text.startIndex, offsetBy: range.location)
let endIndex = text.index(text.startIndex, offsetBy: range.location + range.length)
text = text.replacingCharacters(in: startIndex..<endIndex, with: string)
if text.count == 0 {
// textField is empty
} else {
// textField is not empty
}
return true
}
2)editingChanged
アクションを使用します:
@IBAction private func textFieldDidChange(_ sender: UITextField) {
if (sender.text?.count ?? 0) == 0 {
// textField is empty
} else {
// textField is not empty
}
}
また、削除された範囲がテキストの全長であるかどうかを確認する必要があります。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if !(range.location == 0 && string.count == 0 && range.length == textField.text?.count) {
// Text field is empty
}
return true
}