Как выпустить UINavigationController? - PullRequest
0 голосов
/ 01 ноября 2010

Моим приложением является UITabBar с тремя вкладками. В каждой вкладке есть свой UINavigationController.

На первой вкладке есть кнопка обновления - она ​​загружает данные из Интернета (xml). Данные отображаются на трех вкладках.

Как мне выпустить UINavigationControllers, когда кто-то обновляет данные? Причина, по которой я хочу это сделать, заключается в том, что при изменении данных на разных вкладках могут появиться совершенно новые данные для отображения, поэтому было бы немного опасно сохранять этот экран ... если это имеет смысл. Поэтому я хочу полностью обновить UINavigationControllers и показать первое представление в стеке навигации, когда они снова щелкают по вкладке.


Спасибо Райану за его ответ. То, как я это сделал, было что-то вроде этого

for(UINavigationController *navController in [self.navigationController.tabBarController viewControllers]) {
    NSLog(@"popping %@", [navController title]);
    [navController popToRootViewControllerAnimated:NO];
    if ([[navController title] isEqualToString:@"Tab2"])
    {
        Tab2RootController *newRoot2 = [[Tab2RootController alloc] initWithNibName:@"Tab2RootController" bundle:nil];
        newRoot2.title = @"Tab2";
        [navController setViewControllers:[NSArray arrayWithObject:newRoot2] animated:NO];
        //need [newRoot2 release]?
    }
    if ([[navController title] isEqualToString:@"Tab3"])
    {
        Tab3RootController *newRoot = [[Tab3RootController alloc] initWithNibName:@"Tab3RootController" bundle:nil];
        newRoot3.title = @"Tab3";
        [navController setViewControllers:[NSArray arrayWithObject:newRoot3] animated:NO];
        //need [newRoot3 release]?
    }
}

Ответы [ 2 ]

3 голосов
/ 02 ноября 2010

Не одобряйте то, что вы хотите сделать, но вот как это сделать:

-(void)showRootNavigationControllers {
    for(UINavigationController *navController in [tabBarController viewControllers]) {
        [navController popToRootViewControllerAnimated:NO];
    }
}

Ура!

1 голос
/ 06 ноября 2010

popToRootViewController выведет все контроллеры представления в стек, кроме корневого контроллера представления.Если вы также хотите избавиться от корневого контроллера представления, вам необходимо полностью заменить его, используя - [UINavigationController setViewControllers: animated:].Конечно, вам нужно уже настроить новый контроллер корневого представления.Это выглядело бы примерно так (изменяя ответ MattLeff выше):

-(void)showRootNavigationControllers {
    for(UINavigationController *navController in [tabBarController viewControllers]) {
        // You do this: set up the new root view controller for the given tab and assign it to a variable, e.g. newRootControllerForTab...

        // Now set that new root controller as the only view controller in the nav controller.
        [navController setViewControllers:[NSArray arrayWithObject:newRootControllerForTab] animated:NO];
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...