2014-02-07 2 views
0

Я хочу запрограммировать приложение, которое создает ViewControllers самостоятельно. Является ли это возможным?Создать ViewControllers программно/автоматически

Прямо сейчас я делаю вкладку, которая получает случайное число (n) с сайта и создает n вкладок. Когда я запускаю приложение, все в порядке, но когда я нажимаю на одну вкладку, он выходит из строя, не показывая ошибку. Как я могу это сделать?

Вот это простой код, я использую, когда страница массив с числом вкладок, которые я хочу:

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

Да очень возможно,

вопрос, что вы имели в путь вы добавляете tabBarController «в целях». Я смог воспроизвести вашу ошибку, и, как вы сказали, никаких полезных предупреждений не было.

Это, как вы делаете это (мой пример в didFinishLaunching в AppDelegate)

некорректной WAY

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 как RootViewController окна вместо того, чтобы добавить представление tabBarControllers как подпункт к вашему другому представлению.

ПРАВИЛЬНЫЙ ПУТЬ (также в didFinishLaunching в AppDelegate)

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.

+0

Спасибо! Это решает проблему! Теперь у меня все черное ... Я собираюсь решить это! Большое спасибо! –

+0

рад, что смогу помочь – anders

Смежные вопросы