2012-02-26 2 views
0

У меня есть мое приложение вроде этого: navigationBar в делегате приложения с контроллером 1 (UIViewController), как rootController, в контроллере i i push controller2 (UIViewController), контроллер2 имеет 3 UINavigationController и пользовательскую вкладкуBar , каждый navigationController имеет корневой контроллер, и, наконец, я помещаю весь navigationController в CustomTabBar.NavigationControllers и UITabBar

Мой вопрос: этот чистый (хороший), чтобы сделать это? Если нет, как я могу организовать свой проект?

MyAppDelegate.h 
@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) UINavigationController *navigationController; 
@property (strong, nonatomic) CustomTabBar *tabBarController; 

MyAppDelegate.m { 
UIViewController *controller1 = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.window.backgroundColor = [UIColor whiteColor]; 
    navigationController = [[UINavigationController alloc] initWithRootViewController:controller1]; 
self.window.rootViewController = navigationController; 
} 

controller1.h 
    UIViewController controller2; 
    UINavigationController *navigationController2; 

    UIViewController controller3; 
    UINavigationController *navigationController3; 


    UIViewController controller3; 
    UINavigationController *navigationController3; 

controller1.m 
-(void)viewDidLoad{ 

viewController1 = [[UIViewController...... 
navigationController1 = [[UINavigationController alloc] initWithRootViewController:controller1]; 
.... 

AppDelegate *apDelegate= [UIApplication sharedApplication].delegate; 

    apDelegate.tabBarController = [[CustomTabBar alloc] initWithNibName:nil bundle:nil]; 
    [apDelegate.tabBarController setViewControllers: [NSArray arrayWithObjects:navigationController1,navigationController2,navigationController3,nil]]; 
} 
+0

Попробуйте лучше объяснить свой вопрос и разделите свой код в функциональных единицах. Трудно читать. Спасибо. –

+0

Я не уверен, что понимаю, что вы хотите сделать. Вы хотите иметь contoller1 в tab1, controller2 в tab2, controller3 в tab3? – Franck

+0

да, я хочу иметь это – samir

ответ

1

Это отрывок из яблока documentation:

При развертывании интерфейса панели вкладок, вы должны установить этот вид, как корень вашего окна. В отличие от других контроллеров представлений интерфейс панели вкладок никогда не должен устанавливаться как дочерний элемент другого контроллера представления.

С моей точки зрения, это очень сложно с самого начала, чтобы разобраться, как использовать класс UITabBarController, так что в этом случае лучший подход - увидеть хорошее руководство. Для меня this one помогает всегда, когда я начинаю возиться с этим интерфейсом :)

Удачи.

EDIT:
Для того, чтобы иметь свой TabBar появляется только в некоторых конкретных взглядах, вы должны скрыть свой TabBar от начала приложения, и сделать его только тогда, когда это действительно необходимо. Для того, чтобы скрыть его, вы можете использовать метод:

[theTabBar setHidden:YES]; 
+0

спасибо, это значит, что я не могу сделать что-то вроде этого: [self.view addSubview: apDelegate.tabBarController.view]; – samir

+0

точно. Ваша вкладка должна быть в делегате приложения в объекте Window, если я не ошибаюсь.Проведите эти 20 минут, чтобы посмотреть видео, на которое я дал ссылку, и я думаю, вы не пожалеете. – makaron

+0

, но я не хочу, чтобы мой TabBar появился в первом контроллере, я не буду его показывать, когда я нажимаю свой viewContproller1, я буду смотреть видео – samir

0

Установите tabBarController в качестве RootViewController объекта окна:

self.window.rootViewController = tabBarController; 

Или вы можете установить tabBarController.view, как подвид объекта окна:

[self.window addSubView:tabBarController.view]; 
+0

спасибо за ваш ответ, но я не хочу, чтобы моя вкладка появляются в первом представлении, я хочу его во втором представлении, как я могу это сделать? – samir

+0

, пожалуйста, взгляните на мой последний комментарий - у меня была одна и та же задача, и это считается реализованным в предложенном там способе. Вы должны удалить панель с экрана с самого начала приложения. Это подход, выбранный яблоком - и ** не ** некоторый уродливый путь. – makaron

0

если вы хотите добавить tabBarController к представлению SECONDO:

[secondViewController.view addSubView:tabBarController.view]; 

или для navigationController

[navigationController1.view addSubView:tabBarController.view]; 
or 
navigationController1.rootViewController = tabBarController; 

Другими словами в controller1.m объявлении TabBarController и добавить navController1, navController2 и т.д.

Затем добавьте tabBarController к controller1 в RootViewController или как подвид ,

Надеюсь, это то, что вы искали!

+0

ОК спасибо, я проверю это – samir