Объедините UITabBarController с UINavigationController - PullRequest
3 голосов
/ 08 ноября 2011

Я пытался использовать «приложение с вкладками» с панелью навигации в нем. По умолчанию панель вкладок работает нормально, но я просто не могу получить панель навигации. Я нашел кое-что о нажатии на навигационную панель и тому подобное, но все, что я нашел, было несколько лет назад, так что мне это не поможет. И последние вещи устарели, начиная с iOS5 и новой версии Xcode ..

Может ли кто-нибудь указать мне правильное направление, чтобы объединить, чтобы решить эту проблему?

Запомните, пожалуйста, следующие факты:

  • Я разрабатываю для iOS5
  • Я использую Xcode 4.2

Ответы [ 4 ]

14 голосов
/ 08 ноября 2011

Вот как вы можете достичь этого программно.

Удалить ссылку на ваш основной xib в [appName] -Info.plist

В main.m, загрузите вашего делегата:

int retVal = UIApplicationMain(argc, argv, nil, @"myAppDelegate");

В делегате приложения загрузите tabBar, контроллер навигации и представление в navigationController.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // create window since nib is not.
    CGRect windowBounds = [[UIScreen mainScreen] applicationFrame];
    windowBounds.origin.y = 0.0;
    [self setWindow:[[UIWindow alloc] initWithFrame:windowBounds]];

    // View Controllers for tabController (one viewController per tab)
    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];

    // first tab has view controller in navigation controller
    FirstView *firstView = [[FirstView alloc] initWithNibName:@"FirstView" bundle:nil];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstView];
    [viewControllers addObject:navController];

    SecondView *secondView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
    [viewControllers addObject:secondView];    

    // create the tab controller and add the view controllers
    UITabBarController *tabController = [[UITabBarController alloc] init];
    [tabController setViewControllers:viewControllers];

    // add tabbar and show
    [[self window] addSubview:[tabController view]];
    [self.window makeKeyAndVisible];
    return YES;
}
6 голосов
/ 21 февраля 2012
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.

    NSMutableArray *arrayViewController = [[NSMutableArray alloc] init];


        UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil];
        UINavigationController *navigationController1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
        [arrayViewController addObject:navigationController1];

        UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil];
        UINavigationController *navigationController2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
        [arrayViewController addObject:navigationController2];

    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = arrayViewController;
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}
2 голосов
/ 08 ноября 2011

В iOS 5 больше не допускается замена контроллера представления для вкладки (до iOS5 проблем не возникало).Единственный принятый контроллер - это тот, который определен в IB для этой вкладки.Поэтому на этой вкладке необходимо установить контроллер навигации и дать ему представление о панели навигации.Затем вы можете нажимать или выдвигать желаемые виды без изменения контроллера вкладки.

1 голос
/ 08 ноября 2011

Основная теория заключается в том, что вы создаете UITabBarController, затем помещаете в него UINavigationController, а затем помещаете UIViewController в качестве корневого контроллера представления контроллера навигации. bryanmac только что ответил хорошим примером кода.

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