Проблемы с UINavigationController в UITabBarController, viewWillAppear не названный

Как обзор, у меня есть проблемы с UINavigationController в UITabBarController, звоня viewWillAppear каждый раз, когда представление выталкивается от стека.

От делегата UITabBarController сделан программно:

// Create views for Tab Bar
    UINavigationController *view1   = [[UINavigationController alloc] initWithRootViewController:[[newsFeedNavigationController alloc] initWithStyle:UITableViewStylePlain]];
    resizedTabBatItem *tabBarItem1 = [[resizedTabBatItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"newspaper.png"] tag:0];
    [view1 setTabBarItem:tabBarItem1];
    [tabBarItem1 release];

    UIViewController *view2   = [UIViewController new];
    resizedTabBatItem *tabBarItem2 = [[resizedTabBatItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"speechbubble.png"] tag:1];
    [view2 setTabBarItem:tabBarItem2];
    [tabBarItem2 release];

....

// Create the tab bar controller
    bookTabBarController = [BookTabBarController new];
    [[bookTabBarController view] setFrame:CGRectMake(0, 0, 320, 460)];

    // Add the views to it
    NSArray *viewControllers = [NSArray arrayWithObjects:view1, view2, view3, view4, view5, nil];

    [[bookTabBarController tabBarController] setViewControllers:viewControllers];

Моим newsFeedNavigationController является просто разделенный на подклассы UITableViewController (и подкласс не вмешивается в viewWillAppear, поскольку это никогда не называют в newsFeedNavigationController). В нем, объекты, которые при нажатии продвинут новый UIViewController в стек.

Проблема состоит в том, что каждый раз, когда представления выталкиваются от стека, viewWillAppear никогда не называют в newsFeedNavigationController, и объекты в списке остаются выделенными. Я смешивал с этим в течение нескольких часов, в точке, где я нуждаюсь в некоторой помощи для обнаружения то, что я делаю неправильно.

В моем newsFeedNavigationController я пытался добавить NSLog, чтобы видеть, называют ли это, или я сделал что-то, но это даже не называют.

- (void)viewWillAppear:(BOOL)animated {
    NSLog(@"is viewWillAppear called?");
    [super viewWillAppear:animated];
}

Править:

Хорошо, теперь вот что-то странное, которое я заметил:

Если я работаю:

[self presentModalViewController:(any UIview) animated:YES];

и затем отклоните, это, viewWillAppear начинает работать правильно при совании и продвижении представлений... Таким образом, теперь я озадачен. Это не действительно решение, но возможно внутренняя часть чего-то, что продолжается.

7
задан Dandy 17 June 2010 в 18:13
поделиться

2 ответа

Отвечая на свой собственный вопрос, я выяснил, в чем была проблема.

Чтобы соблюсти правило Apple "No UITabBarController inside of a UINavigationController", я написал свой собственный контроллер панели вкладок (bookTabBarController), который основан на стандартном контроллере представления. Моя проблема заключалась в том, что класс не передавал viewDidAppear классу, который управлял контроллерами представления, поэтому он никогда не знал, отображается он или нет.

1
ответ дан 7 December 2019 в 14:29
поделиться

Другое решение - установить делегата контроллера навигации. В делегате реализуйте следующий метод:

- (void)navigationController:(UINavigationController *)navigationController  willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [viewController viewWillAppear:animated];
}

Это гарантирует, что viewWillAppear будет вызываться на любом контроллере представления, представление которого собирается появиться в контроллере навигации. Если вы сделаете это таким образом, viewWillAppear будет вызван независимо от того, появляется ли представление из-за того, что оно выталкивается, или оно появляется из-за того, что выскакивает подпредставление.

1
ответ дан 7 December 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: