2016-12-14 20 views
0

これはウェブブラウザに関するものです。サブビューを削除できませんか?

私はウェブページを扱うカスタムクラスを持っています。

SNBrowserView 
SNBrowserViewPage 

SNBrowserViewPagesには2つのオブジェクトがあります。

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がnilに設定されていない場合も、それはから削除されたページを復元しようとすると、スーパービュー。

これはどのように可能ですか?

がさえ、これは動作しません。

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

    [_snapshotView removeFromSuperview]; 
} 

snapshotViewがサブビューで、removeFromSuperviewは常に動作するはずです、なぜそれにMOREありますか?

+1

'_snapshotView = nil'を呼び出す前に' [_snapshotView removeFromSuperview] 'を呼び出せますか? – Randy

+0

私はこの間違いを何度も何度もやってきました....それは今働きます! – Vulkan

答えて

0

私はあなたが何をしていることnil_viewを設定して、スーパーからnilを削除しているため

[_view removeFromSuperview]; 

_view = nil; 

であなたの

_view = nil; 

[_view removeFromSuperview]; 

のすべてを交換してみてください示唆しています。

関連する問題