首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >故事板-基于回合的游戏的工作流

故事板-基于回合的游戏的工作流
EN

Stack Overflow用户
提问于 2014-01-29 22:13:11
回答 4查看 381关注 0票数 4

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

家庭视图控制器(它有一个UITableView)

单击第1节中的行>加载路径1的UINavigationController

单击第2节中的行>加载路径2的UINavigationController

例如:

路径1-玩你的回合

路径2-猜你该走了

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

现在我正处于一个阶段,一旦路径2完成,用户也应该进行他们的回合(即选择路径2,然后路径1)。

完成这个任务的正确方法是什么?我是否应该从路径2中的最后一个控制器中创建一个segue,这将导致路径1。问题是,路径2有一个UIViewController,它有一个UIImageView,其中包含一个大的映像,并且它会挂在内存中。理想情况下,在用户启动路径1(路径2完成后)之前,清除路径。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-12 15:35:41

对我来说有效的答案其实是一个更简单的方法。将ViewController引用添加到Path2的起始视图控制器。然后简单地更改UINavigationController堆栈中的视图控制器。因为导航控制器不是子类的,或者不需要是子类的,所以工作得很好。

代码语言:javascript
运行
复制
- (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上以供参考。

票数 0
EN

Stack Overflow用户

发布于 2014-02-11 12:44:19

我试过popToRootViewControllerAnimated,但当我们想要movetopath2时,它就不起作用了。我们可以在NSUserDefaults中存储一些检查点,然后相应地存储,但是这种方法在本例中行不通。

代码语言:javascript
运行
复制
[self.navigationController popToRootViewControllerAnimated:YES];

终于找到了如下解决方案:

从下面的工作代码开始,并根据应用程序逻辑对其进行更改。

视图控件.m文件

代码语言:javascript
运行
复制
 #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文件

代码语言:javascript
运行
复制
 - (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文件

代码语言:javascript
运行
复制
- (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;

}
票数 2
EN

Stack Overflow用户

发布于 2014-02-04 18:04:33

  1. 从第2条路径发出通知
  2. 确保您在主视图控制器中订阅了该通知
  3. 在Home View Controller中的通知处理程序方法中,调用当前导航控制器的popToRootViewControllerAnimated:
  4. 手动调用segue启动路径1。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21443803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档