0

コードをよりモジュール化して柔軟にしたいと考えています。

したがって、tableViewDelegate を UIViewController として設定するのではなく、UITableViewController のサブクラスを tableView データ ソースおよびデリゲートとして設定します。

基本的に、元の UIViewController は UITableViewController のサブクラスのビューを提供します。

そうすれば、いくつかの UIViewController のサブクラスで同様のテーブルを使用できます。

場合によっては、UIViewController が tableView を提供し、実行時に tableView デリゲートを切り替えるだけです。

うまくいきます。

UITableViewController から継承する BGTableViewDelegateMother のコードを次に示します (UIViewController.

@implementation BGTableViewDelegateMother

-(void) setDelegate:(id<BGTableViewDelegateMother>)delegate

{
    _delegate=delegate;

    self.view = self.delegate.tvDelegated; //So that viewWillAppear would work fine
    [self view]; //load the view view didload is not called either
    self.delegate.tvDelegated.delegate =self;
    self.delegate.tvDelegated.dataSource=self;
}

わかった。UITableViewController.view は 1 つの目的で使用されます。正しい tableView を指すようになったので、viewWillAppear が呼び出されることを期待しています。そうではありません

tableView が表示されるたびに、少なくとも reloadData が必要だと思います

-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];//never called
    [self.delegate.tvDelegated reloadData];
}

このコードは呼び出されませんでした。ビューは確かに表示されますが。なんで?

viewDidLoad も呼び出されません。

4

1 に答える 1

0

ビューがリンクされており(データソースであり)、画面上にある可能性がある間、テーブルビューコントローラーをビューコントローラーの子ビューコントローラーにします。これは、テーブル ビューが外観コールバックについて知る必要があることをビュー コントローラー階層に伝えます。

于 2013-07-16T08:27:55.957 に答える