Отображать XIB перед UITabBarController? - PullRequest
0 голосов
/ 19 марта 2012

Я сталкиваюсь с этой проблемой в течение нескольких месяцев, и я не знаю, какое решение лучше всего решить. Проблема в том, что мне нужно загрузить XIB до того, как появится мой UITabBar. Мой первый вид, который относится к входу пользователя в систему (НЕ ДОЛЖЕН БЫТЬ ОТОБРАЖЕНО TABBAR), когда пользователь входит в систему, приложение проверяет информацию, а после должен загружать представление с помощью UITabBarController, но каждый раз, когда я пытаюсь сделать это, не представляя представление входа в систему модально, отображаются оба вида: вид входа в систему и вид панели вкладок.

Ответы [ 3 ]

5 голосов
/ 19 марта 2012

Вы можете сначала установить loginViewController как rootViewController вашего основного window, затем, после входа пользователя, установить tabBarController как rootViewController.

Примерно так (предположим, ваш loginViewController viewController1):

Appdelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    UINavigationController *myNav1=[[UINavigationController alloc] initWithRootViewController:viewController1];
    UINavigationController *myNav2=[[UINavigationController alloc] initWithRootViewController:viewController2];
    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:myNav1,myNav2, nil];
    //set the login view
    self.window.rootViewController = viewController1;
    [self.window makeKeyAndVisible];
    return YES;
}

-(void)setTabBar{
    //self.viewController1=nil;
    self.window.rootViewController = self.tabBarController;
}

Затем из loginViewController вызовите метод setTabBar из appDelegate.

LoginViewController.m
#import "AppDelegate.h"

-(void)loginOK{
   AppDelegate *del=(AppDelegate*)[[UIApplication sharedApplication] delegate];
   [del setTabBar];
   //you could add some animation transition between views
}
0 голосов
/ 19 марта 2012

В качестве простого способа добавьте свой вид как подпредставление своего окна и отклоните его, когда он вам больше не нужен.

Например, поместите этот код в ваш appdelegate (при условии, что loginController является свойством вашего appdelegate ... есть и другие способы, это только пример):

[self.window addSubview:self.loginController.view];

Если вы хотите закрыть представление, удалите его:

[self.loginController.view removeFromSuperview];

Не забудьте правильно отпустить loginController.

Таким образом, ваше представление просто «накладывается» поверх представлений панели вкладок. Здесь есть и другие ответы, которые эффективно меняют представление панели вкладок в иерархии представлений только после завершения входа в систему, если вы этого хотите.

0 голосов
/ 19 марта 2012

Насколько я знаю, UITabBarController нельзя встраивать в другие viewController. Имея это в виду, у вас есть следующие варианты:

  1. Представить модальный вид (который вам не нужен)

  2. Скрыть tabBar при запуске и после проверки учетных данных показать tabBar. Но есть и обратная сторона: скрытие / показ tabBar не может быть анимировано.

  3. Вы можете запустить UITabBarController только с одним viewController - тем, который будет запрашивать учетные данные, и после проверки добавьте еще viewControllers к UITabBarController (что добавит больше вкладок ). Это также поведение, которое вы можете увидеть в некоторых приложениях, например Банк Америки (http://itunes.apple.com/us/app/bank-america-mobile-banking/id284847138?mt=8)

Возможно, есть лучшие практики. Это мои предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...