2012-01-10 41 views
0

這裏我試圖動態添加和刪除uitabbarcontroller中的選項卡。如何從uitabbarcontroller中刪除最後一個選項卡(如果只有三個選項卡)

以及替換它們。我的應用程序情況如下。

第一視圖是登錄和約

成功登錄新的3個選項卡後。隨着更多和另外兩個。

更註銷的選擇是有選擇這個後,我想刪除的最後一個標籤和

取代前兩種與再次登錄和版本信息。即(首頁查看)

所以在我的代碼即時通訊做這樣........

///AppDelegate.m

  • (BOOL)申請:(UIApplication的* )application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //覆蓋應用程序啓動後自定義的點。

    self.window.rootViewController = tabBarCntr; tabBarCntr = [[UITabBarController alloc] init]; LogonViewController * logon = [[LogonViewController alloc] init]; logon.tabBarItem.title = @「Logon」; AboutViewController * about = [[AboutViewController alloc] init]; about.tabBarItem.title = @「About」; tabBarCntr.viewControllers = [NSArray arrayWithObjects:sos1,about,nil]; [登錄發佈]; [關於發佈];

    [self.window addSubview:tabBarCntr.view];

    [self.window makeKeyAndVisible]; }

在登錄後成功樹立了新viewcontrollers我IBAction爲以tabbarcontroller

self.tabBarController.viewControllers = [NSArray的

arrayWithObjects:newController1,newController2,更多,零];

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

在我看來,你用2個獨立的tabBarControllers。一個用於登錄,另一個用於應用。一旦您登錄刪除&釋放登錄選項卡並添加應用程序選項卡。並且在註銷後再次刪除&版本應用程序選項卡並添加登錄選項卡。 這將更容易訪問標籤,而不是刪除/添加視圖控制器,重命名標籤,更改標籤圖像。

+0

thnks很多,但我怎樣才能使用兩個單獨的tabbarcontroller,因爲我添加第一個作爲subview到窗口 – user968597 2012-01-10 11:40:25

+0

使appDelegate中的標籤欄控制器的2個實例,在這裏你可以寫一種在窗口上添加的方法。您可以在此方法中維護標籤欄。 – vishy 2012-01-10 11:43:13

+0

@vishy非常感謝你的建議對我也有幫助。我仍然很驚訝,爲什麼我沒有想到這個簡單的解決方案。 – pankaj 2013-03-12 09:15:03

0

您可以通過屬性setViewControllers修改標籤欄控制器:animated:YES。你可以在那裏分配一個新的數組。它相應地切換。

[tabBarController setViewControllers:array animated:YES];

有一個重要的問題。我使用手動引用計數,但是我使用autorelease選項來分配給此數組的視圖控制器,因爲我使用Xcode模板作爲應用程序基礎。這些僅由該數組保留。如果忘記保留在應用程序生命週期中可能出現在不同標籤陣列中的所有視圖控制器,則在更改,更改或甚至數組初始化期間,會出現好奇的內存崩潰。因此,有必要保留您對這些視圖控制器的引用/

相關問題