編集
この回答は時代遅れです。ビュー コントローラーのビューを別のビュー コントローラーのサブビューとして追加する正しい方法は、コンテナー ビュー コントローラーを実装することです。
https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html
元の答え
あなたのパターンは少し普通ではありません。あなたが説明していることを行う最も一般的な方法は、SecondViewController を初期化して提示することです。それが実際に必要な場合は、作成、カスタマイズ、および表示の方法に関する Apple のドキュメントを熟読することを強くお勧めしUIViewController
ますUITableViewController
。
そのすべてを知っていて、本当に何かカスタムをしたい場合は、読み進めてください。
代わりに、SecondViewController のインスタンスを作成し、それを提示するのではなく、そのビューを現在のビュー コントローラー ビューに追加しています。何を達成しようとしているのかが分かっていて、これが実際に望んでいる結果である場合は、それを実行してください。
この一般的なパターンを構成する方法は複数あります。この例では、最も単純な方法に固執します。
1) MainViewController
(MVC) は、SecondViewController
必要な限り (SVC) インスタンスをプロパティに保持する必要があります。
2) SVC はそのサブクラスであるUITableViewController
ため、デフォルトでは として設定されてdataSource
おりdelegate
、そのUITableView
. つまり、テーブルにデータを入力するには、UITableViewDataSource
およびUITableViewDelegate
メソッドを実装する必要があります。テーブルに入力する必要があるデータを知っているSVC
と仮定すると、これを に渡す必要があります。最も簡単な方法は、初期化時に設定できるプロパティを定義することです。MVC
SVC
SVC
MVC
3) テーブルが表示された後にテーブルを閉じる方法があると仮定すると、それMVC
を行う必要があります。基本的に、のビューをそのスーパービューからMVC
削除してから、プロパティを nil に設定します。SVC
SVC
簡単な疑似コードを次に示します。例として最低限のものを書きました。
// MainViewController.h
//
#import "SecondViewController.h"
@interface MainViewController : UIViewController
@property (nonatomic, strong) SecondViewController *svc;
@end
// MainViewController.m
//
#import "MainViewController.h"
@implementation MainViewController
// init and configure views w/ init, loadView, viewDidLoad, etc
// present SecondViewController
- (void)presentSecondViewController:(id)sender {
self.svc = [[SecondViewController alloc] init];
// this example uses an array as the SVC data
self.svc.tableData = @[@"first", @"second", @"third", @"fourth"];
self.svc.view.frame = self.view.bounds;
[self.view addSubview:self.svc.view];
}
// dismiss SecondViewController
- (void)dismissSecondViewController:(id)sender {
if (self.svc) {
[self.svc.view removeFromSuperview];
self.svc = nil;
}
}
// SecondViewController.h
//
@interface SecondViewController : UITableViewController
@property (nonatomic, strong) NSArray *tableData;
@end
// SecondViewController.m
//
@implementation SecondViewController
// init and configure views w/ init, loadView, viewDidLoad, etc
// override tableData getter to create empty array if nil
- (NSArray *)tableData
{
if (!tableData) {
_tableData = @[];
}
return _tableData;
}
// override tableData setter to reload tableView
- (void)setTableData:(NSArray *)tableData
{
_tableData = tableData;
[self.tableView reloadData];
}
// implement UITableViewDelegate and UITableViewDataSource methods using
// the self.tableData array