IOS натиска viewcontroller от navigationcontroller в tabbarcontroller, но не се показва

Сблъсквам се с много странен проблем.

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

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, където имам collectionview. той успешно показва множество клетки. Когато щракна върху клетката,

- (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

Както разбирам. Просто проверете дали сте добавили навигационния контролер към 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