28

2 つの UITableViewをUIView表示する必要がありますが、一緒に表示されることはありませんSegementedBar。どちらか一方を切り替えることができます。

これを処理する最良の方法は何ですか?1 つを作成Table View Controllerしてデータ ソースを変更するか、2 つ作成Table View Controllersして一方が表示されているときに一方を非表示にするだけです。

2 つのテーブルは、カスタム セルが異なる完全に異なるレイアウトになります。

4

5 に答える 5

48

1 つのデータソースとデリゲートを保持します。

これは、すべてのデリゲート/データソース メソッドがより複雑になることを意味しますが、viewController とビューの間の 1 対 1 の関係を維持できることを意味します。

各テーブル ビューへの参照を保持する

//vc.h
@property (nonatomic, weak) IBOutlet UITableView* firstTableView;
@property (nonatomic, weak) IBOutlet UITableView* secondTableView;

データソース/デリゲート メソッドでは、使用中のテーブル ビューに応じてメソッドの動作が異なる必要があるという事実を考慮する必要があります。例えば

//vc.m
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    if (tableView == self.firstTableView) {

        ...

    } else { // tableView == self.secondTableView

        ...
    }
}

return cell;

}

于 2012-05-18T08:59:10.540 に答える
6
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    if (tableView.tag == 1) {

        ...

    } else { // tableView == self.secondTableView

        ...
    }
}

タグは.xibから割り当てることができます。したがって、.hファイルにUITableVeiw変数を含める必要はありません。.xibの2つのテーブルビューが必要

于 2012-05-18T09:29:12.117 に答える
4

現在のアプリでは、1UITableViewUIViewControllerのテーブルに 4 つ必要です。ユーザーが選択したタブに基づいて、一度に 1 つのテーブルを表示する必要があります。4 つのテーブルを追加したのは、すべてが異なるカスタム セルと機能を持つためです複雑さを軽減するために、4 つ取りました。

reloadDataこれの主な利点は、単一のテーブルを更新するために毎回呼び出す必要がないことです。テーブルの表示と非表示のフローを適切に処理する必要があります。そして、それがクールに見えると信じてください。まったくフリックしない。

私の場合、コードだけで 4 つのテーブルを作成しています。そして、渡したタグに基づいてテーブルを返すメソッドを作成します。

cellForRowAtIndexPathコードをさまざまな機能に分割することで、コードをできるだけ小さくしています。

于 2014-12-18T05:40:26.377 に答える
4

どちらのアプローチにも長所と短所がありますが、個人的には、2 つの別個のコントローラーを使用するアプローチを好みます。

アプローチ 1 - 1 つの Table View Controller を作成し、データ ソースを変更する

  • このアプローチは、余分なコードの繰り返しを避けるのに役立ちます。
  • このメモリ管理では、1 つのコントローラーのみを使用するのに適しています (ただし、それまでは大きな問題ではありませんが、多くのデータはありません)。
  • これに関する問題は複雑です。

アプローチ 2 - 2 テーブル ビュー コントローラー

  • このアプローチでは、間違いなく余分な繰り返しコードがあります。
  • しかし、これにより複雑さが軽減されます。
于 2012-05-18T08:51:18.297 に答える
0

別々に使用しUITableViewControllersてビューを交換します。これは、コードが少なく、複雑さが少なく、Apple がTabBarで行う方法です。

コードの複雑さに関しては、実際には何もありません。UISegmentedControlの値が変更されたときにビューを切り替えるには、次の操作を行うだけです。

UIView *previousSuperview = myViewController1.view.superview;
myViewController2.view.frame = myViewController1.view.frame;
[myViewController1.view removeFromSuperview];
[previousSuperview addSubview:myViewController2.view];

hiddenまたは、対応するビューのプロパティを設定することもできます。

于 2012-05-18T09:18:51.787 に答える