簡體   English   中英

從超級視圖中刪除當前視圖

[英]Remove current view from superview

假設我有一個視圖控制器“ViewBViewController”。 在那個視圖控制器中,我創建了一個“ViewAViewController”的實例並使用 addSubView: 方法來顯示這個 ViewAViewController。 然后它處理一堆信息,現在完成了。 我希望它在完成后自動作為子視圖刪除。

我正在查看 removeFromSuperview 方法,但似乎無法從我要刪除其視圖的視圖控制器中調用它(我的第一直覺是 [self.view removeFromSuperview],但這擺脫了整個視圖,而不是只是我追求的子視圖)。

我能想到的唯一方法是設置一個委托協議,並讓視圖 B 代表視圖 A 作為其委托來處理視圖 A 的卸載。 然而,這種方法似乎有點矯枉過正。 我錯過了一個更簡單的解決方案嗎?

提前致謝!

UIViewController沒有響應removeFromSuperview ,因為UIViewController不是UIView而是UIViewController 那里沒有驚喜。 您可以在任何視圖上調用removeSuperview ,例如與視圖 controller 關聯的視圖(此處為self ):

[self.view removeFromSuperview];

或者如果您只想刪除一個子視圖:

[mySubview removeFromSuperview];

或者如果您的子視圖是self的成員(即在界面中聲明):

[self.mySubview removeFromSuperview];

您是否嘗試過: setHidden: YES

這里有兩個基本正確的解決方案:

  • 使用導航 controller。 如果您不希望它成為界面的一部分,您可以隱藏導航欄。 然后,您可以通過調用處理頂視圖 controller 及其從任一視圖 controller 的視圖

    // argument can be YES or NO, as you like [self.navigationController popViewControllerAnimated:YES];
  • 使用委托調用告訴父視圖 controller 執行類似的操作

    -(void)removeViewA { // remove the view from the view hierarchy [self.viewAController.view removeFromSuperview]; // dispose of the view controller so it doesn't leak. self.viewAController = nil; }

確保不泄漏子視圖 controller 及其視圖非常重要。

這些方法中的任何一種都有效,但使用導航 controller 對我來說似乎更習慣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM