ios – Storyboard – 基于回合制游戏的工作流程

我正在创建一个基于回合的游戏,并想知道我的工作流程的正确过程.目前我有以下几点:

主视图控制器(具有UITableView)
  点击第1部分中的行>使用路径1加载UINavigationController
  点击第2部分中的行>使用路径2加载UINavigationController

举个例子:
路径1 – 轮到你了
路径2 – 猜你轮到你了

每个路径都有大约4-5个UIViewControllers加载到导航控制器中.

现在我处于一旦路径2完成的阶段,用户也应该轮到他们(即路径2然后路径1).

完成此操作的正确方法是什么?我应该从路径2中的最后一个控制器创建一个segue>导致路径1.问题是路径2有一个UIVmageController,它有一个带有大图像的UIImageView,它会在内存中徘徊.理想情况下,在用户启动路径1之前(在路径2完成之后)将其清除

最佳答案 我尝试过popToRootViewControllerAnimated,但是当我们想要movetopath2时它不能正常工作.

我们可以在NSUserDefaults中存储一些检查点,然后相应地进行segue,但这种方法在这种情况下不起作用.

[self.navigationController popToRootViewControllerAnimated:YES];

最后我找到了如下解决方案:
从下面的工作代码开始,根据您的应用逻辑进行更改

ViewController.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;

}
点赞