コードをよりモジュール化して柔軟にしたいと考えています。
したがって、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 も呼び出されません。