2016-12-14 125 views
0

這是關於一個web瀏覽器。無法刪除子視圖?

我有一個處理網頁的自定義類。

SNBrowserView 
SNBrowserViewPage 

SNBrowserViewPages有兩個對象。

WKWebView 
UIImageView // Snapshot of the WKWebView 

函數可以維持或恢復內存管理的頁面。

(測試)無論何時選擇頁面,我都會調用恢復功能。

選擇:

- (void)browserView:(SNBrowserView *)browserView didSelectPage:(SNBrowserViewPage *)page 
{ 
     if (page.sustained) { 

      [page recoverAnimated:NO]; 
     } 
} 

延:

- (void)sustain 
{ 
    _sustained = YES; 

    if (_webView) { 

     _webView = nil; 

     [_webView removeFromSuperview]; 
    } 

    _snapshotView = [[UIImageView alloc] init]; 

    _snapshotView.frame = CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height); 

    _snapshotView.image = _snapshot; 

    [self addSubview:_snapshotView]; 
} 

恢復:

- (void)recoverAnimated:(BOOL)animated 
{ 
    _sustained = NO; 

    _webView = [[WKWebView alloc] init]; 

    _webView.frame = CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height); 

    _webView.navigationDelegate = self; 

    _webView.UIDelegate = self; 

    [self addSubview:_webView]; 

    [self sendSubviewToBack:_webView]; 

    [self loadURL:_initialURL]; // Start loading as early as possible. 

    if (animated) { 

     [UIView animateWithDuration:0.3 
         animations:^{ 

          _snapshotView.alpha = 0.0; 
         } 
         completion:^(BOOL finished){ 

          _snapshotView = nil; 

          [_snapshotView removeFromSuperview]; 
         }]; 
    } 
    else { 

     _snapshotView = nil; 

     [_snapshotView removeFromSuperview]; 
    } 
} 

當我嘗試恢復頁面snapshotView沒有設置爲無,也不是從去除超級觀點。

這怎麼可能?

即使這是行不通的:

- (void)recoverAnimated:(BOOL)animated 
{ 
    _snapshotView = nil; 

    [_snapshotView removeFromSuperview]; 
} 

的snapshotView是一個子視圖,removeFromSuperview應該總是工作,爲什麼會出現更多呢?

+1

你可以嘗試在調用'_snapshotView = nil'之前調用'[_snapshotView removeFromSuperview]'? – Randy

+0

我一直在做這個錯誤一遍又一遍....它現在可行! – Vulkan

回答

0

我建議你嘗試,因爲你正在做的是設置_viewnil,然後從上海華盈刪除nil

[_view removeFromSuperview]; 

_view = nil; 

更換所有的

_view = nil; 

[_view removeFromSuperview];