Obj-C, UINavigationControllers в UITabbarController, объяснить простыми словами? - PullRequest
0 голосов
/ 30 декабря 2011

Я играю с некоторым примером кода, чтобы попытаться раз и навсегда выяснить, как заставить контроллер (ы) навигации и контроллер вкладок работать вместе. В качестве бонуса без утечек памяти.

Возникли проблемы, как показано ниже ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
        (NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] 
        bounds]] autorelease];

    // Override point for customization after application launch.
    UIViewController *viewController1 = [[[FirstViewController alloc] 
            initWithNibName:@"FirstViewController" bundle:nil] autorelease];
    UIViewController *viewController2 = [[[SecondViewController alloc] 
            initWithNibName:@"SecondViewController" bundle:nil] autorelease];

    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:
         viewController1, viewController2, nil];
    self.window.rootViewController = self.tabBarController;
    self.navigationController = [[UINavigationController alloc] 
         initWithRootViewController:self.tabBarController]; <<<<

    [self.window makeKeyAndVisible];
    return YES;

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

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] 
      delegate];
[delegate.balNavController pushViewController:nextController animated:YES];

Но это протекает и вызывает проблемы.

Без использования конструктора интерфейса, может кто-нибудь посоветовать мне, в простых терминах , как мне следует делать это, возможно, с несколькими строками кода.

1 Ответ

2 голосов
/ 30 декабря 2011

Я настоятельно рекомендую вам взять с собой копию Руководства по программированию на Большом ботанике для iPhone . Он имеет отличную экспозицию и примеры, чтобы научить вас основам. Теперь о ваших проблемах ...

A UITabBarController устанавливается путем предоставления ему NSArray из UIViewController с или даже UINavigationController с. Панель вкладок не против какой.

A UINavigationController устанавливается путем присвоения ему UIViewController, который будет корнем.

Имейте в виду, что панель вкладок не является контроллером представления, поэтому она не может быть корнем контроллера навигации!

Объединение их - это просто вопрос правильного порядка. Вот общий пример, который, надеюсь, иллюстрирует это.

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{   
    // UIViewController with UINavigationBar
    UIViewController *firstViewController = [[UIViewController alloc] init];
    UINavigationController *firstNavController = [[UINavigationController alloc] initWithRootViewController:firstViewController];

    // Custom subclass of UIViewController with UINavigationBar
    CustomViewController *secondViewController = [[CustomViewController alloc] init];
    UINavigationController *secondNavController = [[UINavigationController alloc] initWithRootViewController:secondViewController];

    // UIViewController without UINavigationBar
    UIViewController *thirdViewController = [[UIViewController alloc] init];

    // Set the NSArray of ViewControllers
    NSArray *viewControllers = [NSArray arrayWithObjects:firstNavController, secondNavController, thirdViewController, nil];
    // This array retains the controllers, so go ahead and release them now
    [firstNavController release]; 
    [secondNavController release]; 
    [thirdViewController release]; 

    // Set up the UITabBarController -  It now holds everything
    tabBarController = [[UITabBarController alloc] init];
    [tabBarController setViewControllers:viewControllers];

    // Add the Tab Bar Controller to the window.
    [window addSubview:[tabBarController view]];
    [window makeKeyAndVisible];

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