以编程方式创建uiTabBarController

时间:2011-11-17 08:51:15

标签: ios objective-c uitabbarcontroller

我想为UIView

创建UITabBarController

以下是.h文件的代码:

@interface TE : UIViewController <UITabBarControllerDelegate>{
    UITabBarController *tabBarController;
}
@property (nonatomic,retain) UITabBarController *tabBarController;
@end

viewDidLoad方法:

UIViewController *testVC = [[T1 alloc] init];
UIViewController *otherVC = [[T2 alloc] init];
NSMutableArray *topLevelControllers = [[NSMutableArray alloc] init];
[topLevelControllers addObject: testVC];
[topLevelControllers addObject: otherVC];
tabBarController = [[UITabBarController alloc] init];
tabBarController.delegate = self;
[tabBarController setViewControllers:topLevelControllers animated:NO];
tabBarController.selectedIndex = 0;
self.view = tabBarController.view;

这会创建标签栏控制器,但是当我单击标签栏项时,我收到错误:

  

线程1:程序接收信号:SIGABRT

修改:我通过下载和修改http://www.iphonedevcentral.com/create-uitabbarcontroller/的版本来解决问题

5 个答案:

答案 0 :(得分:1)

您在上面说过,您不想在appDelegate中创建tabBarController。为什么不?你还能在哪里创造它? tabBarController必须是根视图控制器,不能是任何其他视图控制器的子节点。

顺便说一句,请确保您实施:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {

    NSUInteger tabIndex = [tabBarController.viewControllers indexOfObject:viewController];

    if (viewController == [tabBarController.viewControllers objectAtIndex:tabIndex] ) {
         return YES;
    }

    return NO;

}

答案 1 :(得分:1)

  1. 子类UITabBarController

  2. 覆盖 - (void)loadView方法并包含以下代码

    MyCustomViewControllerOne* ctrl1 = [[[MyCustomViewControllerOne alloc] initWithNibName@"MyViewControllerOne" bundle: nil] autorelease];
    UIViewController* ctrl2 = [[[UIViewController alloc] init] autorelease];
    MyCustomControllerTwo* ctrl3 = [[[UIViewController alloc] initWithObject: myObj] autorelease];
    
    ctrl1.title = @"First tab";
    ctrl2.title = @"Second tab";
    ctrl3.title = @"Third tab";
    
    ctrl1.tabBarItem.image = [UIImage imageNamed:@"tab_image1.png"];
    ctrl2.tabBarItem.image = [UIImage imageNamed:@"tab_image2.png"];
    ctrl3.tabBarItem.image = [UIImage imageNamed:@"tab_image3.png"];
    
    [self setViewControllers: @[ctrl1, ctrl2, ctrl3]];
    
  3. 这就是它。

答案 2 :(得分:0)

尝试更改

self.view = tabBarController.view;

[self.view addSubview:tabBarController.view];

看看是否有帮助。

还可以尝试将其放在-(void)loadView方法

- (void)loadView {

    UIView *mv = [[UIView alloc] initWithFrame:CGRectMake(0.0, 100.0, 320.0, 480.0)];

    self.view = mv;

    [mv release];
}

您可能遇到黑屏的原因是您尚未正确初始化UIView。

答案 3 :(得分:0)

self.view = tabBarController.view;更改为
[self.view addSubview:tabBarController.view];并且它可以正常工作

答案 4 :(得分:0)

@Mehdi,只需让你的TE成为UITabBarController而不是UIViewController,然后在其中有一个TabBarController。使管理TabBarController变得更加容易。要响应其他一些表明你只能有一个TabBarController作为窗口的rootViewController的人。事实并非如此。可以在需要二级菜单导航的多个位置实例化UITabBarController。在TabBar中有一个TabBar是没有意义的,但是有一个左导航菜单,然后在每个菜单项上有一个TabBar是有道理的。