Как перейти к определенному viewcontroller из leftviewcontroller в IIViewDeck в раскадровке?

У меня возникли проблемы с использованием IIViewDeck в моем приложении. Я использую раскадровку. Мне удалось принести leftviewcontroller, который является tableviewcontroller с ячейками, которые должны переходить к определенному viewcontroller в раскадровке. Как мне это сделать? Я положил это в appdelegate.

 UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

UIViewController *menuController = [mainStoryboard    instantiateViewControllerWithIdentifier:@"mainSideNavMenu"];

UINavigationController* navigationController = (UINavigationController *) self.window.rootViewController;
self->viewDeckController =  [[IIViewDeckController alloc] initWithCenterViewController:navigationController leftViewController:menuController rightViewController:nil];
self.window.rootViewController = self->viewDeckController;

2 ответа

Я знаю, что уже немного поздно, но кто-то может найти ответ полезным в какой-то момент.

Макс ответ, как правило, хороший ответ. Однако, вопрос оригинального плаката немного расплывчатый. Он / она не указал, требуется ли переход в контроллере центрального вида или в левом.

Предполагая, что переход находится в левом контроллере вида:

Если вам нужен push-переход, вы можете использовать такой код:

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0) {
        UINavigationController * nc = (UINavigationController *)self.viewDeckController.leftController;
        UIViewController * vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"yourView"]; // use the name of the view (not the navigation view controller)
        [nc pushViewController:vc animated:YES];
    }
}

Если вы хотите модальный переход, просто замените код в предыдущем предложении if на следующий код:

UIViewController * vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"yourViewName"]; // don't use the name of a navigation controller
UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:vc];
[self presentViewController:nc animated:YES completion:nil];

Контроллер навигации в этом коде используется для отображения панели навигации. Если вам не нужна панель навигации, просто опустите определение контроллера навигации и передайте контроллер представления в качестве параметра вместо presentViewController: animated: completion: метод.

Предполагая, что переход находится в контроллере центрального вида:

Вы можете использовать код, который предоставил Макс. Имейте в виду, что способ, которым он показал новый контроллер вида, состоит в замене существующего центрального контроллера вида. Новый контроллер представления не выдвигается и не отображается модально. Если вы хотите перенести новый контроллер вида в существующий контроллер центрального вида, вы должны использовать тот же способ, которым я представил переход в двух предыдущих фрагментах кода выше. Итак, это должно выглядеть так:

Push Transition: (следующий код должен заменить код в предложении if в первом фрагменте кода)

[self.viewDeckController closeLeftView];
UINavigationController * nc = (UINavigationController *)self.viewDeckController.centerController;
[nc pushViewController:[[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"yourViewName"] parentViewController] animated:YES];

Модальное представление: (следующий код должен заменить код в предложении if в первом фрагменте кода)

[self.viewDeckController closeLeftView];
UINavigationController * center = (UINavigationController *)self.viewDeckController.centerController;
UIViewController * vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"yourViewName"];
UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:vc];
[center presentViewController:nc animated:YES completion:nil];

Вы можете управлять этим с помощью кода с помощью метода didSelectRowAtIndexPath вашего табличного представления.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIStoryboard*  sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

if (indexPath.row == 0) {
    MyTripsViewController* newController = [sb instantiateViewControllerWithIdentifier:@"ViewController1"];
    [self.viewDeckController closeLeftViewBouncing:^(IIViewDeckController *controller) {
        self.viewDeckController.centerController = newController;
    }];
}
if (indexPath.row == 1) {
    MyTripsViewController* newController = [sb instantiateViewControllerWithIdentifier:@"ViewController2"];
    [self.viewDeckController closeLeftViewBouncing:^(IIViewDeckController *controller) {
        self.viewDeckController.centerController = newController;
    }];
}
else {
    MyTripsViewController* newController = [sb instantiateViewControllerWithIdentifier:@"ViewController3"];
    [self.viewDeckController closeLeftViewBouncing:^(IIViewDeckController *controller) {
        self.viewDeckController.centerController = newController;
    }];
}

}

Таким образом, вы должны определить пару row / viewController.

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