13

私は UITextField を持っています。そこにテキストが入力されたら、テキスト フィールドから doubleValue を取得し、いくつかの計算を実行して UITableView に表示したいと考えています。

UITextField のデリゲートは、UITextFieldDelegate プロトコルを採用し、textFieldShouldReturn: および textFieldDidEndEditing: メソッドの両方を実装します。textFieldShouldReturn: ファーストレスポンダーのステータスを辞任します。ドキュメントによれば、textFieldDidEndEditing: もトリガーする必要がありますが、textFieldDidEndEditing: が呼び出されることはありません。

- (BOOL)textFieldShouldReturn:(UITextField*)theTextField {
    if (theTextField == thresholdValue) {
        [thresholdValue resignFirstResponder];
    }
    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [self updateThresholdValue:textField];
}

いくつかのテキスト フィールド イベントをデリゲートに接続し、イベントで updateThresholdValue: を直接呼び出そうとしたことも注目に値するかもしれませんが、それもうまくいきませんでした。

4

6 に答える 6

9

あなたが説明したのと同じ問題に遭遇しました。考えられるすべてを試した後、次のデリゲート メソッドを追加しました。

// if we encounter a newline character return
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{   
    // enter closes the keyboard
    if ([string isEqualToString:@"\n"])
    {
        [textField resignFirstResponder];
        return NO;
    }
    return YES;
}

ここで、textFieldShouldEndEditing が起動し、テキスト フィールドがファーストレスポンダを辞任します。

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
于 2010-12-09T13:22:41.517 に答える
7

textFieldDidEndEditing は、テキストフィールドがファーストレスポンダーのステータスを辞任したときに発生し、textFieldShouldReturn は、戻るボタンが押されたときに発生します。

テキストフィールドがfirstResponderとして辞任することはないようです。(コメントで提案されているように)いくつかのデバッグ出力を入れて、タッチでテキストフィールドの外に移動するだけで、非常に簡単に確認できます。

それが大いに役立つかどうかはわかりませんが、あなたがぶつかっている奇妙なケースのように聞こえます.

于 2009-08-04T20:59:16.797 に答える
1

私の場合textFieldDidEndEditing:(UITextField *)textField、代わりにこれが実装されたため、呼び出されませんでしたtextFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason。何らかの理由で iOS 13.4 では呼び出されませんでした。

削除するだけで修正しましたreason ...

コールバックが機能しなくなった理由reasonはまだ不明ですが、短いものは正しく機能します。

ここに画像の説明を入力

于 2020-06-17T11:16:34.993 に答える