2011-10-18 54 views
-1

我有一個tableview,其中,在第一行中,我試圖最初將一個靜態值添加到detailtextlabel。所以當最初加載tableview時,detailtextlabel會顯示默認值。當我點擊detailtextlabel時,它會切換。我添加了將默認值切換到另一個值的代碼。這工作正常。 這是我的代碼:如何在運行時更改tabbar的選項卡

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    cell = [tableView cellForRowAtIndexPath:indexPath]; 
    switch (indexPath.row) { 
     case 0: 
      if ([cell.detailTextLabel.text isEqualToString:@"digital"]) { 
       cell.detailTextLabel.text = @"analog"; 
       userdefaults = [NSUserDefaults standardUserDefaults]; 
       [userdefaults setObject:@"analog" forKey:@"clock"]; 
      } 
      else { 
       cell.detailTextLabel.text = @"digital"; 
       [userdefaults setObject:@"digital" forKey:@"clock"]; 
      } 
      [userdefaults synchronize]; 
      break; 

     default: 
      break; 
    } 
} 

但我的問題是當標籤正從數字更改爲模擬,數字視圖控制器,它被添加在主窗口的第一個標籤,應該得到改變,以模擬視頻控制器,當模擬信號轉換爲數字信號時,數字視圖控制器應該被第一個選項卡中的模擬視圖控制器替代。

//在appdidfinish啓動時,我已經完成了這段代碼,但是它並沒有在運行時改變tabbar。

NSString *clockswitch = [[NSUserDefaults standardUserDefaults]objectForKey:@"clock"]; 
if ([clockswitch isEqualToString:@"digital"]) { 
    DigitalClockViewController *dig = [[DigitalClockViewController alloc]init]; 
    //self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:0]; 
} 
else 
{ 
    AnalogClockViewController *ana = [[AnalogClockViewController alloc]init]; 
    //self.tabBarController.selectedViewController = [self.tabBarController.ana objectAtIndex:0]; 
} 
+0

你就不能由self.tabBarController.selectedIndex設置活動控制器= digitalClockControllerIndex – Willy

回答

0
UITabBarController.viewControllers is an immutable array you need to make a mutable copy. 

NSString *clockswitch = [[NSUserDefaults standardUserDefaults]objectForKey:@"clock"]; 
UIViewController *desiredController = nil; 
if ([clockswitch isEqualToString:@"digital"]) { 
    desiredController = [[DigitalClockViewController alloc]init]; 
} 
else { 
    desiredController = [[AnalogClockViewController alloc]init]; 
} 
NSMutableArray *controllersCopy = [self.tabBarController.viewControllers mutableCopy]; 
[controllersCopy replaceObjectAtIndex:0 withObject:desiredController]; 
self.tabBarController.viewControllers = controllersCopy; 
+0

這是有道理的,你運行在的applicationDidFinishLaunching代碼:withOptions:這是隻有調用,以及當它聽起來像當應用程序完成啓動時。你可以選擇一個邏輯類,也許你的委託可能是rootViewController,並將其設置爲tabBarDelegate,當它調用-tabBar:didSelectItem時:你可以檢查(如果該選項卡被選中)該索引處的viewController是正確的類。 – NJones

+0

嗨@Njones得到了工作。我已經在tabbarcontroller的委託方法中添加了你的代碼,即tabbarController didSelectViewController – Rani

+0

我有一個疑問,我想給我的detailtext標籤的默認值,即默認數字應該顯示在detailtextlabel和標籤默認情況下digitalcontroller應該被顯示 – Rani

相關問題