我正在创建一个基于回合的游戏,并想知道正确的过程,我的工作流程。目前,我有以下几点:
家庭视图控制器(它有一个UITableView)
单击第1节中的行>加载路径1的UINavigationController
单击第2节中的行>加载路径2的UINavigationController
例如:
路径1-玩你的回合
路径2-猜你该走了
每个路径都有大约4-5 UIViewControllers加载到导航控制器中.
现在我正处于一个阶段,一旦路径2完成,用户也应该进行他们的回合(即选择路径2,然后路径1)。
完成这个任务的正确方法是什么?我是否应该从路径2中的最后一个控制器中创建一个segue,这将导致路径1。问题是,路径2有一个UIViewController,它有一个UIImageView,其中包含一个大的映像,并且它会挂在内存中。理想情况下,在用户启动路径1(路径2完成后)之前,清除路径。
发布于 2014-02-12 15:35:41
对我来说有效的答案其实是一个更简单的方法。将ViewController引用添加到Path2的起始视图控制器。然后简单地更改UINavigationController堆栈中的视图控制器。因为导航控制器不是子类的,或者不需要是子类的,所以工作得很好。
- (IBAction)completeButtonPressed:(id)sender {
NSLog(@"complete button pressed");
Path2ViewController *path2StartVC = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"Path21VC"];
[self.navigationController setViewControllers:[NSArray arrayWithObject:path2StartVC] animated:YES];
}我将在稍后将一个示例项目放到github上以供参考。
发布于 2014-02-11 12:44:19
我试过popToRootViewControllerAnimated,但当我们想要movetopath2时,它就不起作用了。我们可以在NSUserDefaults中存储一些检查点,然后相应地存储,但是这种方法在本例中行不通。
[self.navigationController popToRootViewControllerAnimated:YES];终于找到了如下解决方案:
从下面的工作代码开始,并根据应用程序逻辑对其进行更改。

视图控件.m文件
#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0)
{
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
PathOneViewController *pathController = [mainStoryBoard instantiateViewControllerWithIdentifier:@"PathOneViewController"];
[self.navigationController pushViewController:pathController animated:YES];
}
else
{
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
PathTwoViewController *pathController = [mainStoryBoard instantiateViewControllerWithIdentifier:@"PathTwoViewController"];
[self.navigationController pushViewController:pathController animated:YES];
}
}PathOneDetailViewController.m文件
- (IBAction)actionMoveToPathTwo:(id)sender { // Move to path two
AppDelegate *appDelegateTemp = [[UIApplication sharedApplication]delegate];
UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"PathTwoViewController"];
UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController];
appDelegateTemp.window.rootViewController = navigation;
}
- (IBAction)actionMoveToHome:(id)sender { // Move to table View
AppDelegate *appDelegateTemp = [[UIApplication sharedApplication]delegate];
UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"ViewController"];
UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController];
appDelegateTemp.window.rootViewController = navigation;
}PathTwoDetailViewController.m文件
- (IBAction)actionMoveToHome:(id)sender { // Move to table View
AppDelegate *appDelegateTemp = [[UIApplication sharedApplication]delegate];
UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"ViewController"];
UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController];
appDelegateTemp.window.rootViewController = navigation;
}
- (IBAction)actionMoveToPath1:(id)sender { // Move to path one
AppDelegate *appDelegateTemp = [[UIApplication sharedApplication]delegate];
UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"PathOneViewController"];
UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController];
appDelegateTemp.window.rootViewController = navigation;
}发布于 2014-02-04 18:04:33
popToRootViewControllerAnimated:。https://stackoverflow.com/questions/21443803
复制相似问题