1
我想爲iPhone實現雙tabBar應用程序,並使用以下代碼爲基類視圖控制器在視圖控制器內添加若干導航控制器(請參閱下面的代碼)。但問題是:儘管它們被初始化,但沒有子視圖被添加到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;
}
我應該澄清一點:上面的類(第一個代碼塊)是一個TabBar控制器(從xib加載)內的UIViewController,因此是initWithCoder方法。再次感謝任何幫助! – swebal 2010-12-07 16:19:23