2013-08-07 4 views
0

Я хотел бы создать приложение с структурой, похожей на собственное приложение «Телефон» iPhone. Я уточню, что в телефонном приложении есть tabBar, который содержит: «Избранное», «Повторы», «Контакт», «Клавиатура» и «Голосовая почта».Objective-c Nested VIewControllers

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

Я думал начать одно приложение просмотра, чем использовать контроллер представления, который автоматически создается как TabbedViewController, тогда я бы создал другой подкласс другого viewController, и я использовал его как мой NavViewController.

я бы что-то вроде

[myTabBar.view addSubview:myNavController]; 

, но как я могу установить эти инстанции? как только я создаю автоматически созданный ViewController, и я создаю SecondviewController, как я могу установить их как TabViewController и мой NavViewController?

+1

Вы действительно должны прочитать два документа, которые связаны с верхней частью ссылки класса UIViewController. Они помогут вам многое. – rdelmar

ответ

2

Если вы используете раскадровки, просто добавьте контроллер панели вкладок в раскадровку. Затем выберите одну из дочерних сцен панели вкладок, а затем выберите «Вставить вход» - «Контроллер навигации» из меню «Редактор» Xcode. Если вы повторите этот процесс для любых вкладок, которые вы хотите иметь навигационные контроллеры. В этом снимке экрана я добавил контроллер навигации на первую и третью вкладки, но не на второй.

Надеюсь, это иллюстрирует идею.

tab bar controller with navigation controllers embedded


Если вы решили сделать это с крупка, самый простой способ, чтобы начать это создать новый проект с шаблоном Вкладки Application (и, очевидно, на следующем экране, снимите флажок " Использование раскадровки "):

Tabbed Application

Затем откройте файл .m приложение делегата и заменить по умолчанию didFinishLaunchingWithOptions, который выглядит как:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
    UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    self.tabBarController = [[UITabBarController alloc] init]; 
    self.tabBarController.viewControllers = @[viewController1, viewController2]; 
    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
    UINavigationController *navigationController1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
    UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    self.tabBarController = [[UITabBarController alloc] init]; 
    self.tabBarController.viewControllers = @[navigationController1, viewController2]; // was @[viewController1, viewController2]; 
    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Это относительно простой способ запуска приложения с вкладкой на основе NIB. Затем вы можете настроить его.

Лично я изо всех сил пытаюсь представить, почему кто-то будет использовать NIB, а не раскадровки (если вы не пытаетесь поддержать iOS 4), но, надеюсь, это иллюстрирует обе техники.

+0

Можете ли вы плз, кто без раскадровки? – Mario

+2

@Mario, почему вы хотите сделать это без раскадровки? – rdelmar

+1

@Mario Я не уверен, почему вы хотели бы получить дополнительные неприятности NIB вместо раскадровки, но я обновил свой ответ на примере того, что вы могли бы сделать. – Rob

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