以编程方式/自动创建ViewControllers

时间:2014-02-07 19:17:47

标签: ios ios7 uiviewcontroller uitabbarcontroller

我想编写一个自己创建ViewControllers的应用程序。有可能吗?

现在我正在做一个从网站获取随机数(n)的tabbar并创建n个标签。当我运行应用程序时,一切正常但是当我点击一个选项卡时,它会失败而不显示错误。我该怎么做?

这是我正在使用的简单代码,其中pages是一个包含我想要的选项卡数量的数组:

NSMutableArray* controllers = [[NSMutableArray alloc] init];

    for (int i=0; i<[pages count]; i++) {

        UIViewController * vc1 = [[UIViewController alloc] init];

        vc1.title = [[pages objectAtIndex:i] objectForKey:@"title"];
        [controllers addObject:vc1];
    }

    tabBarController.viewControllers = controllers;

    [_window addSubview:tabBarController.view];

我不知道是否可能或我如何做到这一点,欢迎任何帮助。

感谢!!!

1 个答案:

答案 0 :(得分:1)

非常可能,

您遇到的问题是将tabBarController添加到视图中的方式。我能够复制你的崩溃错误,就像你说没有给出有用的警告。

这就是你的做法(我的例子是appDelegate中的didFinishLaunching)

不正确的方式

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

UIViewController *vc = [[UIViewController alloc] init];
[vc.view setFrame:self.window.frame];

UITabBarController *tabBarController = [[UITabBarController alloc] init];
NSMutableArray* controllers = [[NSMutableArray alloc] init];

for (int i=0; i<10; i++) {

    UIViewController * vc1 = [[UIViewController alloc] init];

    vc1.title = [NSString stringWithFormat:@"%d", i];
    [controllers addObject:vc1];
}

[tabBarController setViewControllers:controllers];

self.window.rootViewController = vc;

[vc.view addSubview:tabBarController.view];
return YES;

正确的方法是将tabBarController设置为windows rootViewController,而不是将tabBarControllers视图作为子视图添加到其他视图。

正确的方式(也在appDelegate中的didFinishLaunching中)

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

UITabBarController *tabBarController = [[UITabBarController alloc] init];
NSMutableArray* controllers = [[NSMutableArray alloc] init];

for (int i=0; i<10; i++) {

    UIViewController * vc1 = [[UIViewController alloc] init];

    vc1.title = [NSString stringWithFormat:@"%d", i];
    [controllers addObject:vc1];
}

[tabBarController setViewControllers:controllers];

self.window.rootViewController = tabBarController;
return YES;

希望这会让你走上正轨。这里的带走消息是您不应该尝试将viewControllers视图作为子视图添加到其他viewControllers视图。