2012-01-10 10 views
0

ここでは、uitabbarcontrollerからタブを動的に追加および削除しようとしています。3つのタブしかない場合、uitabbarcontrollerから最後のタブを削除する方法

同様に置き換えます。私のアプリの状況は次のとおりです。

ファーストビューには、ログオンし、約

後に正常にログオンし、新たな3つのタブです。最後はMoreと他の2つ。より多くのログオフオプションで

は私が最後のタブを削除し、

が再びログオンし、約持つ最初の二つを交換したいこれを選択した後があります。このようにやって私のコードイムにおけるだから、すなわち(ホームビュー)

........

///AppDelegate.m

  • (BOOL)アプリケーション:(のUIApplication * )アプリケーションdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //アプリケーション起動後のカスタマイズのためのオーバーライドポイント。

    self.window.rootViewController = tabBarCntr; tabBarCntr = [[UITabBarController alloc] init]; LogonViewController * logon = [[LogonViewController alloc] init]; logon.tabBarItem.title = @ "ログオン"; AboutViewController * about = [[AboutViewController alloc] init]; about.tabBarItem.title = @ "About"; tabBarCntr.viewControllers = [NSArray arrayWithObjects:sos1、about、nil]; [ログオンのリリース]; [リリースについて];

    [self.window addSubview:tabBarCntr.view];

    [self.window makeKeyAndVisible];

    self.tabBarController.viewControllers = [NSArrayの

    arrayWithObjects:newController1、newController2、より多くの、nilを] tabbarcontrollerする新しいviewcontrollersを設定 }

    ログオンに成功した後

と私のIBActionで。

Now in my loggoff i coding something like..... 
     NSMutableArray *newArray; 
    newArray=[NSMutableArray arrayWithArray:self.tabBarController.viewControllers]; 
     [newArray replaceObjectAtIndex:0 withObject:logon]; 
     [newArray replaceObjectAtIndex:1 withObject:about]; 
     [newArray removeLastObject]; 
     self.tabBarController.selectedIndex=0; 
     [self.tabBarController setViewControllers : newArray]; 


    but my applcation crash here after this .... 
can any has solution for this ... 

Thnxです。

Paggyyyyy

編集:NSMutableArrayのarrayWithArrayはあなたが2つの別々のtabBarControllersを使用し、私の意見では、コード

答えて

2

を修正するためにスペースを追加しました。 1つはログイン用、その他はアプリ用ですあなたがログインしたら、&ログインタブを解放し、アプリのタブを追加します。再度ログアウトした後、&リリースアプリのタブを削除し、ログインタブを追加します。 これは、ビューコントローラを削除/追加すること、タブの名前を変更すること、タブイメージを変更することよりもタブにアクセスすることが容易になる。

+0

thnksがたくさんありますが、私は最初にサブビューとしてウィンドウに追加すると2つの別のtabbarcontrollerを使用することができます – user968597

+0

appDelegateのタブバーコントローラの2つのインスタンスを作成し、ウィンドウに追加するメソッド。この方法でタブバーを維持することができます。 – vishy

+0

@vishyあなたの提案が私のために働いてくれてありがとう。なぜ私がこの単純な解決法について考えなかったのか、私はまだ驚いています。 – pankaj

0

プロパティのsetViewControllers:animated:YESでタブバーコントローラを変更できます。そこに新しい配列を割り当てることができます。それに応じて切り替わります。

[tabBarController setViewController:array animated:YES];

重要なものが1つあります。私は手動参照カウントを使用しますが、アプリケーションベースとしてXcodeテンプレートを使用しているので、この配列に割り当てられたView Controllerに対して自動解放オプションを使用しました。これらはその配列によってのみ保持されます。アプリケーションライフサイクル中に異なるタブ配列内に表示される可能性のあるすべてのView Controllerを保持することを忘れた場合、変更後、変更中または配列の初期化中に気になるメモリクラッシュが表示されます。したがって、これらのビューコントローラへの参照を保持する必要があります/

関連する問題