Objective-C:需要帮助跟踪以前按下的按钮



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

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

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

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

我可以一直传递一个变量,每个

按钮都是唯一的,并提出一个 if then else 语句来测试变量的值(即如果 [questionansweredcorrect isEqualToString :@"Question1"]),但由于我这里可能有一百个或更多的按钮,这太麻烦了。

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

提前感谢!

编辑:

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

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

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

据我所知,你完全否定了你的第一个观点。或者您重新加载第一个视图,因为您应该再次显示它。

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

要显示上一个视图(包含所有按钮),只需在第一个视图顶部加载的视图中使用此代码:

[self dismissModalViewControllerAnimated:YES];

希望对您有所帮助!

这对我来说是一个设计模式的问题。我不认为我确切地理解这是如何实现的,但这是我如何攻击它。

你有 QuestionGridViewController 塞满了按钮,每个按钮都显示一个 GameScreenViewController 的实例,根据

  1. 点击的按钮
  2. 用户。

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

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

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

对于所有这些按钮按下,使用自定义初始值设定项初始化游戏屏幕,该初始值设定项将用户对象和问题对象作为参数。

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

这是遵守MVC的巨大优势 - 您已经从逻辑中抽象了数据,并且这样做可以挽救您在此类问题上的理智。

我不知道这是否是你想要解决的问题,但正如SirKaydian所指出的,你做事的方式并不是特别明显。但是,我希望我已经展示了良好的应用程序设计如何避免这些琐碎的问题。

最新更新