ViewDeck удаляет панель навигации при настройке центрального контроллера

В настоящее время я использую ViewDeck со раскадровками и имею следующую настройку в application didFinishLaunchingWithOptions:

//View Deck Setup
UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
UIViewController* menuController = [mainStoryboard instantiateViewControllerWithIdentifier:@"LeftSideMenu"];
UINavigationController* navigationController = (UINavigationController *) self.window.rootViewController;

self.viewDeckController = [[IIViewDeckController alloc] initWithCenterViewController:navigationController leftViewController:menuController rightViewController:nil];
self.window.rootViewController = self.viewDeckController;

Тем не менее, когда я устанавливаю новый CenterController из моего MenuViewController панель навигации удаляется, даже если загружается тот же контроллер центрального вида, на который я смотрел ранее.

- (IBAction)viewUsers:(UIButton *)sender
{
    UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
    UIViewController* viewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"middleViewController"];

    [self.viewDeckController setCenterController:viewController];
    [self.viewDeckController closeLeftView];
}

Что я делаю неправильно?

1 ответ

Решение

Решением является удаление любого класса "конструктор колоды" между AppDelegate и вами TabBar. Когда вам нужно установить или изменить структуру Deck, я создаю несколько методов для каждой структуры. Например, если вы хотите, чтобы в Deck был контроллер представления "leftView" слева, "rightView" справа и "tabBarHome" в центре, создайте такой метод в App Delegate:

-(void) lanzarHome{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
IIViewDeckController* deckController =[[IIViewDeckController alloc] initWithCenterViewController:[storyboard instantiateViewControllerWithIdentifier:@"tabBarHome"]
                                                                    leftViewController:[storyboard instantiateViewControllerWithIdentifier:@"leftView"]
                                                                    rightViewController:[storyboard instantiateViewControllerWithIdentifier:@"rightView"]];

deckController.leftSize = 100;
self.window.rootViewController = deckController;
[self.window makeKeyAndVisible];

}

Теперь вы должны вызвать этот метод из вашего viewController с таким предложением:

[((VKAppDelegate*) [[UIApplication sharedApplication] delegate]) lanzarHome];

Самое важное - создать метод, который изменяет или вводит структуру Deck из AppDelegate, и у вас никогда не будет другого класса или viewController между делегатом и центром TabBar.

Я надеюсь, что этот ответ решит вашу проблему. Для меня было очень тяжело разобраться в этом вопросе.

Другие вопросы по тегам