2013-03-20 1 views
0

У меня возникла очень странная проблема.IOS pushing viewcontroller от navigationcontroller в контроллере tabbar, но не отображается

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

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]; 
} 

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

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

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

+0

Вы должны описать структуру приложения более тщательно. Вы сделали контроллеры в раскадровке? В коде? – rdelmar

+0

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

+0

ok, обновляется с помощью структуры кода –

ответ

0

Как я понимаю. Просто проверьте, добавили ли вы 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]; 
+0

Да, я уверен, что навигационный контроллер добавлен на вкладку. Доступ к self.navigationcontroller не равен nil –

+0

Да, но вам нужно добавить navigationController в tabBar. У вас добавили их. – Rahul

+0

да, я добавил. если я его не добавлю, я даже не смогу увидеть представление. –

0
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]; 
if (tabBarControllerObj!=nil) { 
tabBarControllerObj=nil; 
} 
tabBarControllerObj=[[UITabBarController alloc]init]; 
NSArray *arrayObj=[[NSArray alloc]initWithObjects:self.homeNavigationController,self.accountNavigationController,self.activityNavigationController,self.exploreNavigationController, nil]; 
[tabBarControllerObj setSelectedIndex:0]; 
tabBarControllerObj.tabBar.hidden = YES; 
[tabBarControllerObj setViewControllers:arrayObj]; 
[self.window addSubview:tabBarControllerObj.view]; 
+0

Просто добавьте этот код, удалив ваш. Удалите последний навигационный контроллер u. – Rahul

+0

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

+0

Его рабочий код .. Просто сделайте демо и попробуйте этот код там u найдет решение .. – Rahul

1

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

- (void)viewWillAppear:(BOOL)animated 

отсутствует

[super viewWillAppear:animated];