2

テキストフィールドやその他のラベルを持つセルがいくつかあります。基本的に、ユーザーがキーボードでデータを入力した後、(さまざまな方法で) 別のテキスト フィールドに移動できます。ユーザーが移動したいテキスト フィールドをポインターに保存し、テキスト フィールドの didEndEditing メソッドをトリガーするファーストレスポンダーを設定します。didEndEditing で、tableData をリロードしてさまざまなラベルを更新する refresh メソッドを呼び出し、保存したテキスト フィールドに FirstResponder を再度設定しようとします。

最終的に、キーボードは画面に表示されたままになりますが、テキスト フィールドはフォーカスされません。ただし、もう一度試すと、2回目は機能します...

ここにいくつかのコードがあります。計算やログなどを扱う多くの部分が切り取られていることに注意してください。この問題に関連するものだけを追加しました。

編集も、矢印ボタンを使用してナビゲートしていると述べたことは知っています..矢印ボタンを使用しない場合、問題はここにもあります。別のテキストフィールドを離れた後にフォーカスを得るには、テキストフィールドを手動で 2 回押す (またはクリックする) 必要があります。

 //user presses an arrow button to enter textfield

 //logic is done here to find what the next textfield would be

 _nextTextFieldSelection = (UITextField *)[[_tableView cellForRowAtIndexPath:destinationIndexPath] viewWithTag:newTag];
[_nextTextFieldSelection becomeFirstResponder];


- (void)textFieldDidEndEditing:(UITextField *)textField
{
     //some stuff for calculations
     [self refreshScreen]
}

- (void)refreshScreen
{
    [_tableView reloadData]; 
    //set tables values

    [_nextTextFieldSelection becomeFirstResponder];
}
4

3 に答える 3

1

テーブルをリロードすると、セルが再作成されます。キャッシュされnextTextFieldSelectionたものは、正しいテキストフィールドインスタンスへの参照ではなくなっている可能性があります。テキストフィールドの代わりにindexPathをキャッシュしてから、タグを使用して、インデックスパスが指定されたセルから適切なテキストフィールドを取得してください。

于 2013-02-27T19:14:09.297 に答える