0

我希望你能帮助我回答一个基于 Objective-C 的问题,该问题目前正在阻止我继续我的程序。

我有一个游戏,其中您有一个按钮网格,标题为 1、2、3 等。每个按钮都会将您带到 GameScreen UIView 并传递各种信息 - 即姓名、年龄等。如果用户回答问题正确,他被带回网格 - 我现在希望他按下的按钮显示一个刻度,而不是像以前那样只是一个带有一些文本的空白按钮。

我的问题是跟踪按下的按钮。当我返回主屏幕时,我不知道如何说“将我刚刚按下的按钮更改为刻度图像”。到目前为止,所有东西都显示为 (null)。

当我首先按下一个按钮时,我使用 'if([sender.currentTitle isEqualToString:@"1"]) 来标记我想要传递的信息 - 这很好,但是在那之后当我通过另一个视图时我丢失按下了哪个按钮。

我可以通过一个变量一直传递每个按钮唯一的变量,并提出一个 if then else 语句来测试变量的值(即 if [questionansweredcorrectly isEqualToString :@"Question1"]),但我可能有一个这里有一百个以上的按钮,太麻烦了。

我希望我已经很好地解释了这种情况,并且有人能够指出我需要在这里使用的方法。

提前致谢!

编辑:

为了响应我如何加载到其他视图中,我使用以下编码风格:

GameScreen *screen = [[GameScreen alloc] initWithNibName:nil  bundle:nil]; 
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentModalViewController:screen animated:YES];

这就是我进入新视图的方式 - 从另一个屏幕执行相同操作以返回带有按钮的主屏幕。我在这篇文章中不使用故事板。这是否有助于澄清我如何浏览这些视图?我不使用故事板。

4

2 回答 2

0

据我了解,您完全驳回了您的第一个观点。或者您重新加载第一个视图,因为您应该再次显示它。

不是 100% 了解如何加载视图,但我认为这可能会有所帮助:

要显示前一个视图(带有所有按钮),只需在您加载到第一个视图顶部的视图中使用以下代码:

[self dismissModalViewControllerAnimated:YES];

希望能帮助到你!

于 2012-06-03T15:47:30.810 回答
0

这让我觉得是设计模式的问题。我不认为我完全理解这是如何实现的,但这就是我如何攻击它。

你有 QuestionGridViewController 塞满了按钮,每个按钮都显示一个 GameScreenViewController 实例,基于适当的配置

  1. 按下的按钮
  2. 用户。

让我们在这里关注MVC。您需要一个模型类来保存每个问题(并且可能有问题对象来封装该数据)。

您还需要一个代表用户及其详细信息。

在 QuestionGrid 的 viewDidLoad 中,从问题模型加载问题以填充视图。那些已经完成的应该设置刻度线。

对于所有这些按钮按下,使用自定义初始化程序初始化 GameScreen,该初始化程序将用户对象和问题对象作为参数。

提交 GameScreen 的答案后,更新问题对象。再次加载 QuestionGrid 时,它会加载更新的问题。两个视图控制器都不必将任何数据传递给另一个。

这是遵循 MVC 的巨大优势——您已经从逻辑中抽象出数据,并且在这样做的过程中,避免了此类问题的理智。

我不知道这是否正是您想要解决的问题,但正如 SirKaydian 所指出的,您的工作方式并不是特别明显。然而,我希望我已经展示了优秀的应用程序设计如何能够避免这些琐碎的问题。

于 2012-06-03T16:14:32.430 回答