6

誰かがこれに光を当てることができることを願っています。

私は会社のアプリに取り組んでおり、カスタム UITextField である検索フィールドがあります。現在、入力された各文字で検索を絞り込みます。

問題: 検索中であることを示す小さなポップアップが表示され、キーを押すたびに、画面のオンとオフが点滅します。彼らは明らかにこれを望んでいません。

方法はわかりませんが、キーを押すたびに検索を絞り込むのではなく、入力が終わったら検索することを考えていました。しかし、「検索」ボタンを追加する必要もありません。私は彼らにタイピングを終えてもらいたいだけです.1秒遅れるか何か,検索が行われます.

ユーザーが入力を終了したことを検出する方法はありますか? 誰もこれをやったことがありますか?

前もって感謝します。

4

3 に答える 3

9

おそらく単純な NSTimer でこれを行うことができます。タイマーが有効かどうかを確認し、shouldChangeCharactersInRange:有効な場合は無効にしてから、タイマーを再起動します。時間がついに発火するときは、指定した時間間隔でユーザーが何も入力していないことを意味します。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (someTimer.isValid) {
        [someTimer invalidate];
    }
    someTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timeToSearchForStuff:) userInfo:nil repeats:NO];

    return YES;
}

@Jai Govindani がこのメソッドを実装するために指摘したように、コントローラーを UITextField のデリゲートとして割り当て、コントローラーが UITextFieldDelegate プロトコルに準拠していることを確認する必要があります。

于 2013-08-16T15:11:49.300 に答える
5

メソッド timerWithTimeInterval:target:selector:userInfo:repeats: を使用して、ランループにタイマーを追加する必要があります。次のように回答を編集する必要がありました。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range  replacementString:(NSString *)string{
    if (someTimer.isValid) {
        [someTimer invalidate];
    }
    someTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timeToSearchForStuff:) userInfo:nil repeats:NO];
    [[NSRunLoop mainRunLoop] addTimer:someTimer forMode:NSDefaultRunLoopMode];
    return YES;
}
于 2014-07-29T03:34:55.047 に答える