UIViewでUITableViewControllerを提示したいのですが、回避策がありますが、なぜこのように機能するのかを理解したいと思います。
シナリオは次のようになります。-新しいシングルビューアプリケーションを作成しました-IB
でメインビューにビューを追加しました
-ビューのアウトレットを作成しました:
@property (weak, nonatomic) IBOutlet UIView *placeholderView;
-プロジェクトにXIBを含む新しいUITableViewControllerを追加しました-numberOfSectionsInTableViewを
1を返すように変更し、numberOfRowsInSectionを10を返すように変更し、cellForRowAtIndexPath:
cell.textLabel.text = @"hello";
-ViewControllerファイルのViewDidLoadメソッド:
ORGTableViewController *tableView = [[ORGTableViewController alloc] initWithNibName:@"ORGTableViewController" bundle:nil];
[self.placeholderView addSubview:tableView.tableView];
これで、テーブルはplaceholderViewに表示されますが、空です。TableViewControllerファイルでは、InitWithStyleメソッドとViewDidLoadメソッドが呼び出されます。ただし、numberOfSectionsInTableView、numberOfRowsInSection、およびcellForRowAtIndexPathはいずれも呼び出されません。
また、AppDelegateのこのコードをdidFinishLaunchingWithOptionsメソッドに追加しようとしましたが、期待どおりに機能しており、テキスト付きのセルが表示されます。<em>
ORGTableViewController *tableViewController = [[ORGTableViewController alloc] initWithNibName:@"ORGTableViewController" bundle:nil];
self.window.rootViewController = tableViewController;
したがって、それは機能し、UIViewにUITableViewControllerを追加したときに、委任がどういうわけか混乱したように見えます。回避策は簡単です... ViewController、viewDidLoadメソッド:
ORGTableViewController *tableViewController = [[ORGTableViewController alloc] initWithNibName:@"ORGTableViewController" bundle:nil];
tableViewController.tableView.delegate = tableViewController;
[self.placeholderView addSubview:tableViewController.tableView];
委任がこのように機能する理由を知っていますか?
THX!