子ビューコントローラで余分な処理をせずに、必要に応じてそれを戻すために、子ビューコントローラを解除した後に保持する必要があります。私は、リンクの下に使用し、それを達成しようとしている:親に戻った後、子ビューコントローラ(コンテナ実装)を保持する方法は?
How does View Controller Containment work in iOS 5?
これらのリンク(および同様の他は)子ビューコントローラをもたらすか、またはそれを却下が、「それを保持」ではないの目的を果たすました。以下の私のコードを見つけてください:
/* Adding a child view controller */
self.detailsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailsViewController"];
self.detailsViewController.name = @"DetailsText";
// data to do "processing in viewDidLoad of child"
self.detailsViewController.someOtherDataForProcessing = someOtherDataForProcessing;
self.detailsViewController.delegate = self;
[self addChildViewController:self.detailsViewController];
self.detailsViewController.view.frame = CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, 200);
[self.view addSubview:self.detailsViewController.view];
/* Bringing the child up on swipe gesture */
[UIView animateWithDuration:0.5 animations:^{
self.detailsViewController.view.frame = CGRectMake(0, 100, self.view.frame.size.width, 200);
} completion:^(BOOL finished) {
[self.detailsViewController didMoveToParentViewController:self];
}];
/* Moving child down when back pressed on child */
[UIView animateWithDuration:0.5 animations:^{
[self.detailsViewController willMoveToParentViewController:nil];
self.detailsViewController.view.frame = CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, 200);
} completion:^(BOOL finished) {
[self.detailsViewController.view removeFromSuperview];
[self.detailsViewController removeFromParentViewController];
}];
i「は、親のスワイプで再度」子コントローラを持参する必要がある場合、私は再び全体のプロセスを通過する必要があります。私が必要とするのは、「スワイプジェスチャーで子を持ち上げる」プロセスを実行するだけで、インスタンス化は子コントローラのデータ処理(時間のかかる)を行うため、再度インスタンス化しないことです。
私は、iOSアプリケーションプログラミングのnoobですので、これが明白な質問であれば私にご負担ください。
'self.detailsViewController'はどのように宣言されていますか?それは '強い'であるべきです。 – Cyrille
@property(強い、非原子的)DetailsViewController * detailsViewController; 問題は次の行にあると思います。 [self.detailsViewController willMoveToParentViewController:nil]; [self.detailsViewController.view removeFromSuperview]; [self.detailsViewController removeFromParentViewController]; でも削除できませんか? –