0

メイン ビュー コントローラーのビューを読み込みます。このメイン ビュー コントローラーは、2 つの子ビュー コントローラー (分割ビュー: マスターと詳細) を追加します。init メソッドで追加した直後に子 VC の数をログに記録すると、出力として「2」が得られます。-switchToCommunication メソッドを呼び出して、詳細な子 VC を削除しようとしても、ビューは変わりません。しかし、ログによると、アレイが実際には 2 つの子 VC から 1 つに縮小されています。

どうしたの?

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
[super init];

//add master view controller as childVC
self.test2 = [test2 new];
[self addChildViewController:self.test2];
self.test2.view.frame = CGRectMake(0, 0, 256, 768);
[self.view addSubview:self.test2.view];
[self.test2 didMoveToParentViewController:self];

//add detail view controller as childVC 
self.detail1Vc = [EADetailSupportViewController new];
[self addChildViewController: self.detail1Vc];
self.detail1Vc.view.frame = CGRectMake(284, 0, 740, 768);
[self.view addSubview: self.detail1Vc.view];
[self.detail1Vc didMoveToParentViewController:self];
NSLog(@"Child VC in childVC array: %d", [self.childViewControllers count]);



- (void) switchToCommunication {
//remove currently active detail view controller from parent view
NSLog(@"Child VC in childVC array: %d", [self.childViewControllers count]);


[[self.childViewControllers lastObject] willMoveToParentViewController:nil];
[[[self.childViewControllers lastObject] view] removeFromSuperview];
[[self.childViewControllers lastObject] removeFromParentViewController];

NSLog(@"Child VC in childVC array: %d", [self.childViewControllers count]);

NSLog(@"pushed");

//add communication detail view controller as child view controller
...
}
4

3 に答える 3

3

このコードは、子ビューを削除するのに役立つ場合があります。me.self.childViewControllers は配列であるため、特定のインデックスから削除できます。

  [[self.childViewControllers objectAtIndex:0] removeFromParentViewController];
于 2014-03-20T16:25:21.153 に答える
0

私はそれを理解したと思います:子VCにポインタを転送する代わりに、親VCの新しいクラスを作成しただけで、新しい初期化が行われました(すべての子VCを元に戻します)。含まれているクラスへのポインターを常に子 VC に転送する必要があります。

于 2013-02-03T10:39:07.790 に答える