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

#ios #objective-c #iiviewdeckcontroller

#iOS #objective-c #iiviewdeckcontroller

Вопрос:

У меня возникают трудности с использованием 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;
 

Ответ №1:

Вы можете управлять этим с помощью кода, используя метод 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;
    }];
}
 

}

Итак, вам нужно определить пару строк / ViewController.

Ответ №2:

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

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

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

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

 - (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];
 

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

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

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

Переходный переход: (следующий код должен заменить код в предложении оператора 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];