我正在使用以下代码将 subview Controller 添加到我的主视图 Controller :
HPSPhotoLibraryOverlayController* controller = [[HPSPhotoLibraryOverlayController alloc] init];
[self.view addSubview:controller.view];
[self addChildViewController:controller];
[controller didMoveToParentViewController:self];
subview Controller 控制的 View 包含一个按钮,当点击该按钮时应该从主视图 Controller 中删除 subview 和 subview Controller 。
按下按钮时运行的 subview Controller 中的方法如下所示:
-(void)photoLibraryCloseButtonTapped:(id)sender
{
[self.view removeFromSuperview];
[(HPSFormController*)_parentController photoLibraryRequestingClose];
}
然后主视图 Controller 中关闭 subview Controller 的方法如下所示:
-(void)photoLibraryRequestingClose
{
UIViewController* controllerToRemove;
for (UIViewController* controller in self.childViewControllers) {
if ([controller isKindOfClass:[HPSPhotoLibraryOverlayController class]])
{
[controller removeFromParentViewController];
controllerToRemove = controller;
}
}
if (controllerToRemove)
{
controllerToRemove = nil;
}
}
这段代码全部有效。但是,在我看来, subview Controller 被设置为 nil,而 subview Controller 的 -(void)photoLibraryCloseButtonTapped:(id)sender 方法仍在运行(即 -(void)photoLibraryRequestingClose 方法尚未返回,但是我正在取消调用 photoLibraryRequestingClose 的 subview Controller 。
我正在使用 ARC。
为什么会这样,我应该以不同的方式管理 subview Controller 的删除,同时记住触发子 Controller 删除的按钮是由 subview Controller 管理的。
非常感谢。
最佳答案
请查看有关 Implementing a Custom Container View Controller 的 Apples View Controller 编程指南特别是在 list 14-2 中:
- (void) hideContentController: (UIViewController*) content
{
[content willMoveToParentViewController:nil];
[content.view removeFromSuperview];
[content removeFromParentViewController];
}
回答你的问题你应该像这样改变你的代码:
- (void)photoLibraryCloseButtonTapped:(id)sender
{
[(HPSFormController*)_parentController photoLibraryControllerRequestingClose:self];
}
- (void)photoLibraryControllerRequestingClose:(UIViewController *)childController
{
[childController willMoveToParentViewController:nil];
[childController.view removeFromSuperview];
[childController removeFromParentViewController];
}
关于ios - 何时以及如何使子 UIViewController 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15000248/