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