2016-04-20 4 views
0

問題:カスタムiOSのUITabBarController委任トリガのviewDidLoad

アンUITabBarControllerのデリゲートメソッドは、のviewDidLoadを呼び出し、否定/画面選択を無視します。

背景:

私は小さなiOS画面用のスプリットビューコントローラを作成しています。

Custom Split-View Controller

削除のTabBarと詳細ビュー(RS)、私は、UITabBarControllerを使用していますのために:だから、ここまで画面は次のようになります。このhereのコードを見つけることができます。

ユーザーが左のボタンを選択し、デリゲートがボタンのタグIDをUITabBarControllerデリゲートメソッドに送信します。

デリゲートメソッドは次のようになります。代わりにブレークポイントで

// delegate method in subclass of UITabBarController 
-(void) screenSelected:(int)screenNum 
{ 
    NSLog(@"delegate arrived: %d", screenNum); 
    self.selectedIndex = screenNum; 
    // code goes to viewDidLoad 
} 

、私はスクリーンが実際に変化していないと判断しました。

このscreenSelectedメソッドが代わりにUITabBarControllerのviewDidLoadメソッドから呼び出された場合(アプリケーションが最初に開くとき)、メソッドは正常に動作し、selectedIndexは期待どおりに変更されます。

私は、デリゲートがviewDidLoadをトリガーしている理由を理解しようとしています。デリゲートがビューをリセットしますか?あなたがもう一度タブを初期化しているため

おかげ

+0

正確に何をしたいですか?質問を正しく理解できないのですか? – Lion

+0

デリゲートメソッドが適切なviewControllerを表示し、デリゲートメッセージを受け取るたびにviewDidLoadメソッドを呼び出さないようにしたいと思います。 viewDidLoadはselectedIndexを0にリセットします。 – Dev

答えて

0

はい、viewdidloadは毎回呼び出します。 setSelectedIndex intialize tabbarcontroller evrytime from UITabbarcontrollerクラス。あなたはクラスからそれを行うべきではありません。ちょうどtabbarcontroller oneceを初期化します。

このようにtabbarcontrollerを使用しないでください。あなたの要件に応じて、ボタンをクリックするだけでviewControllerと表示されるタブバーを使用する必要はありません。

希望します。

+0

解決策は、viewControllerをcontainerViewに配置してから、ビューをボタンのセグに入れ替えることです。目標は、ビューを整理することです、tabBarControllerは可能性のようです。あなたの助けに感謝します。 – Dev

+0

ようこそ。 :) – Lion