IOS толкает контроллер просмотра из контроллера навигации в контроллер табуляции, но не показывает

Я столкнулся с очень странной проблемой.

Вот структура кода в моем делегате приложения:

self.accountViewController = [[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil];
self.homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
self.exploreViewController = [[ExploreViewController alloc] initWithNibName:@"ExploreViewController" bundle:nil];
self.activityViewController = [[ActivityViewController alloc] initWithNibName:@"ActivityViewController" bundle:nil];
self.homeNavigationController = [[UINavigationController alloc] initWithRootViewController:self.homeViewController];
self.accountNavigationController = [[UINavigationController alloc] initWithRootViewController:self.accountViewController];
self.activityNavigationController = [[UINavigationController alloc] initWithRootViewController:self.activityViewController];
self.exploreNavigationController = [[UINavigationController alloc] initWithRootViewController:self.exploreViewController];

self.tabBarController = [[MyOwnTabBarController alloc] init];
[self.tabBarController setDelegate:self];
[self.tabBarController setViewControllers:[NSArray arrayWithObjects:self.homeNavigationController, self.exploreNavigationController,self.activityNavigationController,self.accountNavigationController,nil]];
[self.tabBarController setSelectedIndex:0];
[self.navController setViewControllers:[NSArray arrayWithObjects:self.welcomeViewController, self.tabBarController, nil] animated:NO];

для этого self.navController я определяю это так

self.navController = [[UINavigationController alloc] initWithRootViewController:self.welcomeViewController];
self.window.rootViewController = self.navController;

поэтому после того, как будет представлен tabbarcontroller, я окажусь на homeviewcontroller, где у меня есть представление коллекции. он успешно отображает несколько ячеек. Когда я нажимаю на ячейку,

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    [self.navigationController pushViewController:vc animated:YES];
}

я вижу, что панель навигации изменена с новым заголовком в «vc», а также отображается кнопка «Назад» на панели навигации. Однако представление не изменилось, я все еще могу получить доступ к представлению коллекции.

однако, если я нажму на другую вкладку на контроллере вкладок, например, на accountviewcontroller, а затем снова вернусь к старой вкладке для homeviewcontroller, теперь появится представление. это очень странное поведение, я понятия не имею, почему это происходит.

я также проверил, что в каждом из контроллеров представления self.navigationcontroller не равен нулю


person Vincent Yiu    schedule 20.03.2013    source источник
comment
Вам нужно более подробно описать структуру вашего приложения. Вы сделали контроллеры в раскадровке? В коде?   -  person rdelmar    schedule 20.03.2013
comment
Примерно неделю назад был очень похожий вопрос, на который так и не ответили. Вы не получите никакой полезной помощи без полного описания вашей установки.   -  person rdelmar    schedule 20.03.2013
comment
хорошо, обновлена ​​​​структура кода   -  person Vincent Yiu    schedule 20.03.2013
comment
Где и как вы создаете контроллер, который вы нажимаете, vc?   -  person rdelmar    schedule 20.03.2013
comment
Я не могу сказать из того, что вы опубликовали, почему это не работает. Какие изменения и/или дополнения вы внесли в UITabBarController в MyOwnTabBarController? Я думаю, что в целом не рекомендуется встраивать контроллер панели вкладок в контроллер навигации (я заметил в IB, что опция встраивания в контроллер навигации недоступна для контроллера панели вкладок). Думаю, лучше просто представить приветственный контроллер с первой вкладки.   -  person rdelmar    schedule 20.03.2013
comment
vc создается так же, как и другие контроллеры просмотра, используя initwithnibname   -  person Vincent Yiu    schedule 20.03.2013


Ответы (3)


Обнаружена проблема в подклассе tabbarcontroller, где

- (void)viewWillAppear:(BOOL)animated

пропал, отсутствует

[super viewWillAppear:animated];
person Vincent Yiu    schedule 20.03.2013

Насколько я понимаю. Просто проверьте, добавили ли вы navigationController в tabBar. Проверьте это ниже. Если нет Передайте мне общий сценарий.

tabBarControllerObj=[[UITabBarController alloc]init];
    NSArray *arrayObj=[[NSArray alloc]initWithObjects:navForView1,navForView2,navForView3,navForView4,navForView5, nil];

    [tabBarControllerObj setSelectedIndex:0];
    tabBarControllerObj.tabBar.hidden = YES;
    [tabBarControllerObj setViewControllers:arrayObj];
    [self.window addSubview:tabBarControllerObj.view];
person Rahul    schedule 20.03.2013
comment
Да, я уверен, что навигационный контроллер добавлен на панель вкладок. Доступ к self.navigationcontroller не нулевой - person Vincent Yiu; 20.03.2013
comment
Да, но вы должны добавить навигационный контроллер на панель вкладок. Вы добавили их. - person Rahul; 20.03.2013
comment
да, я добавил это. если я не добавлю его, я даже не смогу увидеть вид. - person Vincent Yiu; 20.03.2013

person    schedule
comment
Просто добавьте этот код, удалив свой. Удалите последний навигационный контроллер, который вы добавили. - person Rahul; 20.03.2013
comment
проблема все еще существует. Что так странно, если я нажму на одну из других вкладок, а затем вернусь, теперь все работает нормально. Я просто не знаю, почему вкладка на другой вкладке может решить эту проблему. - person Vincent Yiu; 20.03.2013
comment
Это рабочий код.. Просто сделайте демо и попробуйте этот код, там вы найдете решение.. - person Rahul; 20.03.2013