3

いくつかのデリゲート メソッドを含む UITableView があります。最初のロード中は問題ありませんが、ローテーション中にメソッドcellForRowAtIndexPathがリコールされないことがわかりました。なんで?私のデリゲートメソッドは次のとおりです。

-(NSInteger)tableView:(UITableView *)tableView
  numberOfRowsInSection:(NSInteger)section{
       //.....
   }

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
     //......
 }
 - (UITableViewCell *)tableView:(UITableView *)aTableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath{

     //...This method is not called during the rotation of the device...

  }

  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
      //.......
  }
4

2 に答える 2

1

[tableView reloadData]withinshouldAutorotateToInterfaceOrientationメソッドを使用してローテーションが発生した後、テーブル データを手動で更新する必要があります。

于 2012-10-30T15:00:37.420 に答える
0

このメソッドは、セルが画面に表示されようとしていて、テーブルがそれを要求したときにのみ呼び出されます。ビューに表示されると、スクロールしてビューの外に出てから戻るまで、再度呼び出されることはありません。

ローテーションの処理には 3 つのオプションがあります。

  • オートレイアウトを使用
  • スプリングとストラットを使用
  • layoutSubviews をオーバーライドします (ローテーションで呼び出されます)。

何を選択するかは、セル レイアウトの複雑さによって異なります。また、回転時にテーブルのサイズが変更されることを確認してください。そうしないと、セルのサイズが変更されません。

于 2012-10-30T14:50:53.520 に答える