2010-11-28 15 views
3

私は3番目のタブとしてUIView-Subclass(ImageViewer)をネストするUITabBarControllerを持っています。ビューが表示される前にUITabBarController execのviewDidAppearがなぜですか?

私は viewDidAppearメソッドを呼び出します。このImageViewerのサブクラスでは

- (void) viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    /* ... start custom code ... 
    NSLog(@"viewDidAppear tag 1 passed);   /* BREAKPOINT 1 here 

    [myUIActivityIndicator stopAnimating]; 

    NSLog(@"viewDidAppear tag 2 passed);   /* BREAKPOINT 2 here 
    /* ... end custom code ... 
} 

メソッドが自動的に呼び出されますが、この方法が完全に処理された後に不思議なビューのみが表示されていますか?

示されているようにブレークポイント(1と2)を設定すると、前のタブが表示されている間に処理(タブを選択すると)が停止します。 2番目のブレークポイントの後に続行をクリックした場合にのみ、ビューが表示されます。 (NSLogsは無事に実行されます)。この場合

よりviewWillAppearようviewDidAppear振る舞う....

に行くかもしれない何をどれ手がかり?

乾杯

それの音から
+0

本当にあなたが提案したようにメソッドを呼び出していますか? – blindjesse

+0

いいえ、メソッドはタブ3を選択した後に自動的に呼び出されます。 – iFloh

+0

システムがまだ画面を再描画する時間を見つけられなかったようです。これはたぶん何も見えない理由です。 – JustSid

答えて

11

あなたはときにビューのロード画面が再描画されることができるように、しかし-viewDidAppear:にいくつかの他の更新コードをトリガするために、このようなperformSelector:withObject:afterDelay:を使用したい場合:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self performSelector:@selector(updateUI) withObject:nil afterDelay:0.0]; 
} 

… 

- (void)updateUI 
{ 
    // Do your UI stuff here 
} 

あなたがそれを行うと、このように、現在のイベントループはすばやく終了し、UIKitはビューの読み込み後に画面を再描画できます。 updateUIは、次のイベントループで呼び出されます。これは、ビューがロードされた後に計算集約的な計算または更新を実行する必要がある場合に、適切なビュー遷移を得るための良い方法です。

+0

また、viewDidAppearはiOS5でも動作します。 – bentford

1

、あなたが積極的にメソッドを呼び出している場合、デバイスは、それはあなたのviewDidAppear方法で「カスタムコード」を実行している間、実際にビューを表示するための時間を持っていない可能性があります。その場合、プログラムがviewDidAppearメソッド自体を呼び出させるようにする必要があります。

あなたのプログラムは、ビューの表示を遅くする他のコードでも動作している可能性があります。これは、タイマーを使用して解決できます。すなわち、代わりの:

[self otherCode]; 

あなたが書くでしょう:

[NSTimer scheduledTimerWithTimeInterval:.5 
    target:self 
    selector:@selector(otherCode) 
    userInfo:nil 
    repeats:NO]; 

あなたは、単にこのようにタイマーを使用して、「カスタムコード」を遅らせるしようとする場合があります。

+0

よかった、ありがとう。これは症状の周りに私を取得します。根本的な原因を治すことができるかどうかを調べるためにこのスレッドを開いたままにしておきます...私はこのためにちょうどクラッシュするように見える第一世代のiPod Touchでアプリケーションを実行します... – iFloh

関連する問題