3

現在、デフォルトのテキストを含むUITextFieldがあり、編集の開始時にクリアするように設定されています。編集が行われたときにフィールドが空またはnilの場合、テキスト値が再びデフォルトのテキストになるようにしようとしています。編集が行われたとき、またはキーボードが閉じられたときの検出に問題があります。使用したい検出方法とその実装方法を教えてもらえますか?本当にありがとう!


編集


私の場合、 Aplaceholderは使用できません

4

6 に答える 6

13

テキストフィールドデリゲートを使用する必要があります

-(void)textFieldDidEndEditing:(UITextField *)textField;

このデリゲートでこのようにチェックしてください

if ( [textField.text length] == 0 )
{
    // the text field is empty do your work
} else {
    ///  the text field is not empty 
}
于 2012-05-15T06:16:38.963 に答える
9
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
    if (range.location == 0 && string.length == 0)
    {
        //textField is empty
    }
    return YES;
}
于 2013-09-14T10:12:44.240 に答える
4

「デフォルトのテキスト」を自分で処理する必要はないと思います。クラスplaceholderのプロパティを確認してください。UITextField

アップデート

だからplaceholderあなたの場合には良くありません。UITextFieldDelegateのメソッドを実装してUITextField、テキストを変更しようとしましたtextViewDidEndEditing:か?

これを行うにUITextFieldDelegateは、View Controllerでシナリオに役立つと思われるメソッドを実装し、View Controllerに設定delegateしますUITextField(Interface Builderまたはプログラムによる)。メソッドにデフォルトのテキストを設定しますtextViewDidEndEditing:

iOS用テキスト、Web、および編集プログラミングガイドの「入力されたテキストの取得とテキストの設定」セクションを参照できます。

于 2012-04-25T01:22:43.437 に答える
2

テキストフィールドが戻ったときにデリゲート呼び出しを受け取ったら、senderパラメータを使用してテキスト()をチェックし、それがデフォルトのテキストsender.textを設定するのと等しいかどうかを確認します。@""

于 2012-04-25T02:17:26.093 に答える
2

私は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
        }
    }
于 2020-03-05T07:51:17.153 に答える
1

また、削除された範囲がテキストの全長であるかどうかを確認する必要があります。

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
}
于 2018-08-27T20:25:14.203 に答える