Как перейти к определенному 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.