2013-02-21 32 views
1

我使用下面的代碼添加子視圖控制器我的主視圖控制器:何時以及如何以抵消孩子的UIViewController

HPSPhotoLibraryOverlayController* controller = [[HPSPhotoLibraryOverlayController alloc] init]; 

[self.view addSubview:controller.view]; 

[self addChildViewController:controller]; 
[controller didMoveToParentViewController:self]; 

孩子視圖控制器控制該視圖包含一個按鈕,敲擊時應該從主視圖控制器中刪除子視圖和子視圖控制器。

在子視圖控制器的方法,使得當按鈕被按下時看起來像這樣運行:

-(void)photoLibraryCloseButtonTapped:(id)sender 
{ 
    [self.view removeFromSuperview]; 

    [(HPSFormController*)_parentController photoLibraryRequestingClose]; 
} 

然後在主視圖控制器的方法,將關閉子視圖控制器看起來像這樣:

-(void)photoLibraryRequestingClose 
{ 
    UIViewController* controllerToRemove; 
    for (UIViewController* controller in self.childViewControllers) { 
     if ([controller isKindOfClass:[HPSPhotoLibraryOverlayController class]]) 
     { 
      [controller removeFromParentViewController]; 
      controllerToRemove = controller; 
     } 

    } 

    if (controllerToRemove) 
    { 
     controllerToRemove = nil; 
    } 

} 

此代碼全部有效。然而,在我看來,子視圖控制器被設置爲nil,而子視圖控制器的 - (void)photoLibraryCloseButtonTapped:(id)sender方法仍在運行(即 - (void)photoLibraryRequestingClose方法尚未返回,但我抵消已經調用photoLibraryRequestingClose子視圖控制器。

我使用ARC。

爲什麼這工作,我應該管理記住不同的軸承去除子視圖控制器的按鈕觸發子控制器正在被子視圖控制器管理的移除。

非常感謝。

回答

1

請看看蘋果視圖控制器編程指南關於Implementing a Custom Container View Controller尤其是在上市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]; 
} 
+0

太好了 - 謝謝SOPH – Journeyman 2013-02-21 14:08:00

相關問題