1

UITextField のカスタム クリア ボタンを作成する必要があります (配色のため)。私は次のコードを使用しています (クラスは UITextField の子孫です):

UIButton *clearButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[clearButton setImage:[UIImage imageNamed:@"ClearButton.png"] forState:UIControlStateNormal];
[self setRightView:clearButton];
[self setRightViewMode:UITextFieldViewModeNever];
[clearButton addTarget:self action:@selector(clear:) forControlEvents:UIControlEventTouchUpInside];

ほとんどの場合、これで問題なく動作します。問題は、クリア ボタンをクリックすると、UITextField がファーストレスポンダ ステータスを辞任する (つまり、キーボードが消える) ことです。UITextField がフォーカスを保持するようにしたいと思います。

クリアボタンのアクションで最初の応答者のステータスを復元しようとしましたが、UITextField が UITableView にあり、スクロールされている場合、キーボードが閉じて開くと、テーブルに望ましくないスクロールが発生します。

UIButton の代わりに UIImageView を使用できますが、ボタンがタップされたときに視覚的な「パルス」が得られません。

では、ボタンが押されたときに UITextField がファーストレスポンダのステータスを保持する方法はありますか?

iOS 6 を使用して iPhone アプリを開発しています。

[注: 「クリア:」アクション ターゲットはテキスト フィールドを空にするだけですが、とにかく、ターゲットを設定しなくても問題が発生します。]

4

2 に答える 2

1

たぶん私はあなたの質問を理解していませんが、問題は、あなたのtableViewに表示されていないtextFieldでファーストレスポンダーを作りたいということにあると思います。そして、これは起こりえませんでした。最初に textField を含む行を表示する必要があり、最初のレスポンダーとして作成することができます。

NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:yourIndex inSection:0];
[self.tableView scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

そしてより:

[self.textField becomeFirstResponder];
于 2013-02-23T18:40:05.967 に答える
1

理由が見つかりました。ユーザーが「背景」をタップしたときにキーボードを閉じる処理に使用されるジェスチャ認識機能があります。これは、ユーザーがテキスト フィールドの閉じるボタンをクリックしたときにアクティブ化されていました。

私は最終的に実装しました:

gestureRecognizer:shouldReceiveTouch:

クリアボタンを除外します。

于 2013-02-24T00:10:49.600 に答える