次のコードを使用して、子ViewControllerをプライマリViewControllerに追加しています。
HPSPhotoLibraryOverlayController* controller = [[HPSPhotoLibraryOverlayController alloc] init];
[self.view addSubview:controller.view];
[self addChildViewController:controller];
[controller didMoveToParentViewController:self];
子ビューコントローラーが制御しているビューには、タップすると子ビューと子ビューコントローラーをプライマリビューコントローラーから削除するボタンが含まれています。
ボタンが押されたときに実行される子ViewControllerのメソッドは、次のようになります。
-(void)photoLibraryCloseButtonTapped:(id)sender
{
[self.view removeFromSuperview];
[(HPSFormController*)_parentController photoLibraryRequestingClose];
}
そして、子ViewControllerを閉じるプライマリViewControllerのメソッドは次のようになります。
-(void)photoLibraryRequestingClose
{
UIViewController* controllerToRemove;
for (UIViewController* controller in self.childViewControllers) {
if ([controller isKindOfClass:[HPSPhotoLibraryOverlayController class]])
{
[controller removeFromParentViewController];
controllerToRemove = controller;
}
}
if (controllerToRemove)
{
controllerToRemove = nil;
}
}
このコードはすべて機能します。ただし、子ビューコントローラの-(void)photoLibraryCloseButtonTapped:(id)senderメソッドがまだ実行されている間(つまり、-(void)photoLibraryRequestingCloseメソッドはまだ返されていませんが、子ビューコントローラはnilに設定されているようですが、 photoLibraryRequestingCloseを呼び出した子ビューコントローラーを無効にします。
ARCを使用しています。
これが機能する理由と、子コントローラーの削除をトリガーするボタンが子ビューコントローラーによって管理されていることを念頭に置いて、子ビューコントローラーの削除を別の方法で管理する必要があります。
どうもありがとう。