我知道这有点晚了,但有人可能会在某个时候发现答案有用。
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];