Tabbarcontroller с навигационным контроллером

#iphone #uinavigationcontroller #uitabbarcontroller

#iPhone #uinavigationcontroller #uitabbarcontroller

Вопрос:

Я добавляю view controller в navigation controller, а затем добавляю его в контроллер панели вкладок. но если я добавлю это, как

 navigationController.viewControllers = 
        [NSArray arrayWithObjects:rootViewController, rootViewController.photoViewController, nil];


tabBarController.viewControllers = [NSArray arrayWithObjects:tourNavigation,mapNavigation ,browserNavigation,
                                        navigationController,nil];
  

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

 BrowserViewController *browserView = [[BrowserViewController alloc]initWithNibName:@"BrowserViewController"
                                                                                bundle:nil];

    browserView.title = @"Browser";

    UINavigationController *browserNavigation = [[[UINavigationController alloc]initWithRootViewController:browserView]
                                                 autorelease];
  

Это работает нормально.. но навигация с помощью массива не отображается.

Комментарии:

1. Вы уверены, что ни одна из ссылок не равна нулю?

2. я. на самом деле я видел этот код в appdelegate, например, в photoviewcontroller.photoViewController = [[PhotoViewController new] авторелиз]; if ([[DBSession sharedSession] is LINKED]) { NavigationController.ViewControllers = [NSArray arrayWithObjects:RootViewController, RootViewController.photoViewController, nil]; } // Добавьте представление контроллера навигации в окно и отобразите. [окно addSubview:NavigationController.view];

3. И я хочу добавить это в tabbarcontroller. есть идеи?

4. Мое первое предположение было nil controller, попробуйте создать более простой пример только с базовым контроллером навигации и посмотрите, работает ли это.

5. код, который я опубликовал в комментарии, работает правильно. для панели вкладок это не так.

Ответ №1:

Я не думаю, что вам следует так настраивать viewControllers массив навигационного контроллера. Вместо этого попробуйте:

 navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
[navigationController pushViewController:rootViewController.photoViewController animated:NO];
  

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

Ответ №2:

Вам нужно начать с приложения на основе просмотра. А затем создайте UITabBarController в вашем файле AppDelegate.

Appdelegate.h

 UITabBarController *tabBarController;
// set properties
  

Appdelegate.m

 // Synthsize

tabBarController = [[UITabBarController alloc] init];
tabBarController.delegate=self;

//Adding Search,Nearby,Map,AboutUs,Favorites Tabs to tabBarController  
Search * search = [[Search alloc] init];  
UINavigationController *searchNav = [[UINavigationController alloc] initWithRootViewController:search];  

Nearby* nearby = [[Nearby alloc] init];  
UINavigationController *nearbyNav = [[UINavigationController alloc] initWithRootViewController:nearby];  

Map* map = [[Map alloc] init];  
UINavigationController *mapNav = [[UINavigationController alloc] initWithRootViewController:map];  

AboutUs* aboutUs = [[AboutUs alloc] init];  
UINavigationController *aboutUsNav = [[UINavigationController alloc] initWithRootViewController:aboutUs];  

Favorites* favorites = [[Favorites alloc] init];  
UINavigationController *favoritesNav = [[UINavigationController alloc] initWithRootViewController:favorites];  

NSArray* controllers = [NSArray arrayWithObjects:searchNav,nearbyNav,mapNav,aboutUsNav,favoritesNav, nil];  
tabBarController.viewControllers = controllers;  

[window addSubview:tabBarController.view];    
  

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

Затем в каждом из упомянутых выше контроллеров просмотра вам необходимо реализовать

 - (id)init {}
  

в котором вы можете задать название вкладки и изображение.

Комментарии:

1. Мое приложение основано на окне. И он запускается со стартовой страницы, и я закодировал эту строку в кнопке стартовой страницы. пожалуйста, скажите, могу ли я сделать это на базе Windows?

2. Привет. Я не уверен в этом. Я никогда не пробовал это в оконном приложении. И мне действительно жаль, что я не могу попробовать это сегодня, поскольку у меня нет с собой моего MAC. Вы можете попробовать это. Запишите результат. Для меня это тоже будет полезно. Спасибо 🙂