2015-10-01 76 views
-2

我想刪除一個視圖,有時它工作正常,有時不是。我是初學者。我不知道什麼問題。我煩了。請讓我知道什麼problem.my代碼:Objective -c,removeFromSuperview無法每次都工作

-(void)hideNotification 
{ 
    btnNotification.selected=NO; 
    btnHome.selected=YES; 
    [notificationScreen.view removeFromSuperview]; 
    notificationScreen=nil; 
    isNotificationScreen=NO; 
} 

我也曾嘗試:dispatch_async(dispatch_get_main_queue()^ { [notificationScreen.view removeFromSuperview]; });performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO];但沒有成功請幫忙。我會感謝你

+1

什麼是'notificationScreen'?它在哪裏定義,創建,銷燬,替換?你有沒有調試過,以檢查你是否有參考,並且它不是正確的實例? – Wain

回答

-1

我會檢查在這種情況下首要的事情是確保只在主線程上更新我的用戶界面。相信,你已經試過了。

接下來,每Apple Documentation,我將確保以下的事情:

如果視圖的上海華盈不爲零時,上海華盈釋放視圖。 切勿在視圖的drawRect:方法中調用此方法。

最後,不確定您notificationScreen對象的樣子,我會嘗試設置在視圖中的代碼被刪除並基於標記值將其刪除。不知道是否notificationScreen引用您當前的視圖控制器,其中您的上面的代碼現在可以工作。嘗試了這一點:

  1. 設置您要初始化,並增加它的父視圖時去除 (myNotificationView.tag = 1)視圖的標籤。
  2. 當你準備刪除的通知來看,像這樣做

for (UIView *view in [self.view subviews]) { if (view.tag == 1) { [view removeFromSuperview]; } }

對於第2步,你可以有一個強引用您的通知視圖和對象上調用removeFromSuperview

+0

使用標籤識別視圖很脆弱,不太可能成爲解決問題的辦法。 – Abizern

+0

是的,這就是爲什麼我給了使用財產。要解決該問題,建議使用標籤選項。 – Abhinav

-1

首先你需要檢查你的視圖是否是子視圖。只需更改如下代碼:

-(void)hideNotification 
{ 
    btnNotification.selected=NO; 
    btnHome.selected=YES; 
    if([notificationScreen.view isDescendantOfView:self.view]){ 
     [notificationScreen.view removeFromSuperview]; 
    } 
    notificationScreen=nil; 
    isNotificationScreen=NO; 
} 
+0

這沒有什麼區別。如果視圖沒有超級視圖,那麼'removeFromSuperview'不起作用。這只是增加了一個多餘的電話。 – Abizern

相關問題