0

UITableView を表示している iOS アプリケーションがあります。UITableView は、UITextFields と UILabels で構成されるカスタム行で構成されています。最初の起動時に、UIImageView を閉じるためにユーザーがボタンを押すまで UITableView をカバーする UIImageView があります (したがって、その背後にある UITableView が表示されます)。

ただし、私の問題は、UITableView の最初の行にコントロールを返す代わりに、UITableView の最後の行を選択していることです。その上、メソッド「becomeFirstResponder」を明示的に呼び出しているにもかかわらず、UITextField UITableView の最後の行では、テーブルから行を明示的に選択するまでテキストを入力できません。そうして初めて、テキストを入力できるようになります。私のメソッド「cellForRowAtIndexPath」がテーブルを上から下に入力すると仮定しています。これが、テーブルの一番上ではなく最後の行が選択されている理由です (これは私の推測です。間違っている場合は修正してください)。

私がやりたいのは、ユーザーが UIImageView を閉じて、それが自動的に「firstResponder」になると、UITableView の最初の行を有効にして、ユーザーが特定の行を明示的に選択しなくてもすぐにテキストを入力できるようにすることです。

ボタンを押した後に UIImageView を閉じる私のコードは次のとおりです。

- (IBAction)beginDataEntry:(id)sender {
    
    [_imageView removeFromSuperview];
    [_cell.dataField becomeFirstResponder];
    
} 

テーブルから行を明示的に選択するまで、私の UITableView は「リンボ」状態にあるかのようです。私は何を間違っていますか?

4

1 に答える 1

0

UITableView scrollToRowAtIndexPath:atScrollPosition:animated: を使用して、ビューが再表示されたときに正しい行を表示します。

セルへの参照を維持するよりも、インデックス パスを使用してテーブルの行を参照する方が常に安全です。したがって、ここに代替案があります:

- (IBAction)beginTireCountEntry:(id)sender {

    [_imageView removeFromSuperview];
    NSIndexPath firstCellPath = [NSIndexPath indexPathForRow:0 inSection:0];
     [self.tableView scrollToRowAtIndexPath: firstCellPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
    MyCell cell = (MyCell *)[self.tableView cellForRowAtIndexPath:firstCellPath];
    [cell.dataField becomeFirstResponder];

} 
于 2013-09-03T21:59:41.623 に答える