2011-10-18 13 views
-1

最初の行で最初にdetailtextlabelに静的な値を追加しようとしているテーブルビューがあります。したがって、最初にテーブルビューが読み込まれると、detailtextlabelにデフォルト値が表示されます。 detailtextlabelをクリックすると、それが切り替わります。デフォルト値を別の値に切り替えるコードを追加しました。これは正常に動作しています。 これは私のコードです:実行時にタブバーのタブを変更する方法

- (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; 
    } 
} 

しかし、私の問題は、ラベルがデジタルからアナログに変更なっているときで、メインウィンドウの最初のタブとして追加されたデジタルビューコントローラは、アナログへの変更を取得する必要がありアナログがデジタルに変更されると、デジタル表示コントローラは、第1のタブのアナログ表示コントローラに置き換えられるべきである。

//私はこのコードを実行しましたが、appdidfinishの起動時に実行時にタブバーを変更しません。

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

は、あなたは自分がapplicationDidFinishLaunchingでコードを実行し、理にかなっていること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

でアクティブなコントローラを設定できません:withOptions:それはのように聞こえるときだけうまく、と呼ばれていますアプリケーションの起動が完了すると論理クラス、おそらくはrootViewControllerを選択し、tabBarDelegateとして設定し、-tabBar:didSelectItemを呼び出すと、そのインデックスのviewControllerが正しいクラスであることを確認できます(そのタブが選択されている場合)。 – NJones

+0

こんにちは@Njonesが働いています。私はあなたのコードをtabbarcontrollerのdelegateメソッドに追加しました。つまり、tabbarController didSelectViewController – Rani

+0

私はdetailtextラベルとデフォルトのdigitalcontrollerによって表示される必要がありますので、私のdetailtextラベルにデフォルト値を与えたいと思っています。 – Rani