1

我在我的应用程序中使用 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;
4

2 回答 2

0

我知道这有点晚了,但有人可能会在某个时候发现答案有用。

Max的答案通常是一个很好的答案。但是,原始发布者的问题有点含糊。他/她没有指定在中心视图控制器或左侧视图控制器中是否需要过渡。

假设转换在左视图控制器中:

如果你想要push transition,你可以使用如下代码:

- (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:方法中将视图控制器作为参数传递。

假设转换在中心视图控制器中:

您可以使用 Max 提供的代码。请记住,他展示新视图控制器的方式是替换现有的中心视图控制器。新的视图控制器既没有推送也没有模态显示。如果你想将新的视图控制器推送到现有的中心视图控制器,你应该使用我在上面两段代码中介绍过渡的相同方式。所以,它应该是这样的:

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];
于 2015-01-14T12:43:42.780 回答
0

您可以使用代码和表格视图的 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 对。

于 2014-09-22T16:11:57.693 回答