Как добавить UITabBarController в существующий проект - PullRequest
0 голосов
/ 30 марта 2011

У меня есть проект iPhone, который начинается со стандартного окна на основе UIView ... когда пользователь нажимает кнопку, предполагается, что он запускается в новом представлении с помощью UITabBarController - аналогично тому, как приложение iTunes Connect ведет себя после того, как выавторизоваться.В документации Apple нет примеров кода, делающих то, что я хочу, но я знаю, что это возможно, потому что Apple сделала это в своих собственных приложениях (другой пример - приложение MobileMe iDisk для iPhone).

Я уже попробовалstandard -presentModalViewController: animated: метод, и он не сработал, потому что в UITabBarController нет представления, которое я могу присоединить.

Далее я попытаюсь работать с двумя оконными XIB в делегате приложения дляпосмотрим, смогу ли я использовать этот подход вместо этого.

Буду признателен за любую информацию, если вы знаете, как ответить на эту мою маленькую проблему.=)

Ответы [ 4 ]

1 голос
/ 07 апреля 2011

В итоге я сделал следующее:

В моем делегате приложения в моем интерфейсе есть следующее:

@interface myAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow * window;
    LauncherViewController * startup;
    UITabBarController * tabs;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet LauncherViewController * startup;
@property (nonatomic, retain) IBOutlet UITabBarController * tabs;
@end

В своем файле реализации я добавляю следующее кфункция запуска приложения:

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    [self.window addSubview:self.startup.view];
    [self.window makeKeyAndVisible];

    NSNotificationCenter * notifier = [NSNotificationCenter defaultCenter];

    [notifier addObserver:self
                 selector:@selector(launch)
                     name:MyAppLoginInitializedNotification
                   object:nil];

    [notifier addObserver:self
                 selector:@selector(logout)
                     name:MyAppLogoutNotification
                   object:nil];

    return YES;
}

- (void) launch {
    [self.startup.view removeFromSuperview];
    [self.window addSubview:tabs.view];
    [self.window makeKeyWindow];
}

- (void) logout {
    [self.tabs.view removeFromSuperview];
    [self.window addSubview:startup.view];
    [self.window makeKeyWindow];
}

Мой основной XIB содержит как стандартный UIViewController, определенный как LauncherViewController, так и универсальный UITabBarController.Как только мой основной контроллер запуска аутентифицирует учетные данные пользователя и отправляет MyAppLoginInitializedNotification, делегат приложения переключается с панели запуска на представление вкладок, что позволяет мне продолжить работу с логикой приложения.

0 голосов
/ 30 марта 2011

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

http://www.mobisoftinfotech.com/blog/iphone/iphone-tabbar-uitabbarcontroller-tutorial/

0 голосов
/ 30 марта 2011

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

    UITabBarController *nextController = [[UITabBarController alloc] init];

    FirstController *firstView = [[FirstController alloc] initWithNibName:@"FirstView" bundle:nil];
    SecondController *secondView = [[SecondController alloc] initWithNibName:@"SecondView" bundle:nil];
    ThirdController *thirdView = [[ThirdController alloc] initWithNibName:@"ThirdView" bundle:nil];

    [nextController setViewControllers:[NSArray arrayWithObjects:firstView, secondView, thirdView, nil] animated:NO];

До этого момента все должно быть так же, но вместо этого я помещаю контроллер вкладок в контроллер uinavgiation, так что здесь мы можем отличаться. Я делаю это следующим образом:

    [self.navigationController pushViewController:nextController animated:YES];
0 голосов
/ 30 марта 2011

UITabBarController на самом деле просто подкласс UIViewController, поэтому -presentModalViewController:animated: должно работать:

UITabBarController *someController = [[UITabBarController alloc] init];
someController.viewControllers = /* your View Controllers here */
[self presentModalViewController:someController animated:NO];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...