2010-12-07 14 views
1

私は、iPhone用のデュアルタブバーアプリケーションを実現しようとしています。ベースクラスのView Controllerに次のコードを使用して、View Controller内に複数のナビゲーションコントローラを追加しようとしています(下記のコードを参照)。しかし、問題は次のとおりです。初期化されているにもかかわらず、self.viewにサブビューが追加されません。何か案は?ビューコントローラ内に複数のナビゲーションコントローラを追加していますか?

- (IBAction)ViewButtonPressed:(id)sender 
{ 
    UIButton *b = (UIButton *)sender; 
    int index = b.tag - 1000; 
    [self SelectNavigationController:index]; 
} 

- (void)SelectNavigationController:(int)index 
{ 
    // Set index to top-most view -> 
    UINavigationController *nc = (UINavigationController *)[navigationControllers objectAtIndex:index]; 
    [self.view bringSubviewToFront:nc.view]; 
} 

#pragma mark - 
#pragma mark display 

- (void)Display 
{ 
    CGRect frame = CGRectMake(0, 44, 320, 367); 

    // Create buttons above frame and show navigation controller inside frame -> 

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.origin.y)]; 

    for (int i=0; i<[navigationControllers count]; ++i) 
    { 
     UINavigationController *nc = (UINavigationController *)[navigationControllers objectAtIndex:i]; 
     UIViewController *vc = [nc.viewControllers objectAtIndex:0]; 
     NSString *titel = vc.navigationItem.title; 

     UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [b setBackgroundColor:[UIColor lightGrayColor]]; // TODO: Replace with image <- 
     [b setTitle:titel forState:UIControlStateNormal]; 
     b.tag = i + 1000; 
     [b setFrame:CGRectMake(i * frame.size.width/3, 0, frame.size.width/3, frame.origin.y - 1)]; 
     [v addSubview:b]; 
    } 

    for (int j=0; j<[navigationControllers count]; ++j) 
    { 
     UINavigationController *nc = (UINavigationController *)[navigationControllers objectAtIndex:j]; 
     [nc.navigationBar addSubview:v]; 
     [self.view addSubview:nc.view]; // Add view to view <- 
     nc.view.frame = frame; 
    } 

    [v release]; 

    if (VIEW_DEBUG) 
     NSLog(@"BaseTabViewController.m: self.view.subviews: %d", [self.view.subviews count]); 
} 

#pragma mark - 
#pragma mark addviewcontroller 

- (void)AddViewControllerForNavigationController:(UIViewController *)viewController 
{ 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
    navController.view.backgroundColor = [UIColor greenColor]; 
    [navigationControllers addObject:navController]; 
    [navController release]; 
} 

#pragma mark - 
#pragma mark init, loadView, viewDidLoad and dealloc 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    if (self = [super initWithCoder:aDecoder]) 
    { 
     navigationControllers = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

- (void)loadView 
{ 
    // 
} 

- (void)viewDidLoad 
{ 
    if (!viewDidLoadAlready) 
    { 
     [self Display]; 
     viewDidLoadAlready = YES; 
     [super viewDidLoad]; 
    } 
} 

クラスとサブクラスのコード:

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    if (self = [super initWithCoder:aDecoder]) 
    { 
     PistKartaViewController *pistKarta = [[PistKartaViewController alloc] init]; 
     pistKarta.navigationItem.title = @"Pistkarta"; 
     LiftRapportViewController *liftRapport = [[LiftRapportViewController alloc] init]; 
     liftRapport.navigationItem.title = @"Liftrapport"; 
     SkipassViewController *skiPass = [[SkipassViewController alloc] init]; 
     skiPass.navigationItem.title = @"Skipass"; 

     [self AddViewControllerForNavigationController:pistKarta]; 
     [self AddViewControllerForNavigationController:liftRapport]; 
     [self AddViewControllerForNavigationController:skiPass]; 

     [pistKarta release]; 
     [liftRapport release]; 
     [skiPass release]; 
    } 
    return self; 
} 
+0

私はこれを明らかにする必要があります:上記のクラス(最初のコードブロック)は、(xibからロードされた)tabBarコントローラ内のUIViewController、したがってinitWithCoderメソッドです。助けてくれてありがとう! – swebal

+0

本当に私は似たようなコードが必要です。ここに書いてくれてありがとうございます。しかし、私はよく分かりません。私にソースコードを教えてもらえますか?助けてください 。 –

答えて

0

私はそれを考え出しました。私は、追加していたビューコントローラで次のようなことをしていました...

- (void)loadView 
{ 

} 

もちろん、スーパークラスはまったく読み込まれません。愚か。それ以外の場合、このメソッドは非常にうまく動作します。 :)

関連する問題