我希望你能帮我解答一个基于Objective-C的问题,这个问题目前阻止我继续我的课程。
我有一个游戏,你有一个按钮标题1,2,3等网格。每个按钮都会带你到GameScreen UIView传递各种信息 - 即姓名,年龄等。如果用户正确地回答问题,他被带回网格 - 我现在想要按下的按钮显示勾号,而不是像以前一样只显示带有一些文字的空白按钮。
我的问题是跟踪按下的按钮。当我回到主屏幕时,我无法弄清楚如何说“将我刚按下的按钮更改为刻度图像”。到目前为止所有的事情都是(null)。
当我第一次按下按钮时,我使用'if([sender.currentTitle isEqualToString:@“1”])来标记我想要传递的信息 - 这很好但是在我经过这一点之后另一种观点我输了哪个按钮被按下了。
我可以通过一个变量一直通过每个按钮唯一的变量,并提出一个if then else语句来测试变量的值(即如果[questionansweredcorrectly isEqualToString:@“Question1”])但是作为我这里可能有一百个或更多的按钮太麻烦了。
我希望我已经很好地解释了这种情况,并且有人能够指出我需要在这里使用的方法。
提前致谢!
编辑:
为了回应我如何加载到其他视图中,我使用以下编码风格:
GameScreen *screen = [[GameScreen alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:screen animated:YES];
这就是我进入新视图的方式 - 从另一个屏幕做同样的事情,用按钮返回主屏幕。我不在这篇文章中使用故事板。这有助于澄清我如何浏览观点吗?我不使用故事板。
答案 0 :(得分:0)
根据我的理解,你完全放弃了你的第一个观点。或者你重新加载第一个视图,你应该再次显示它。
不是100%关于加载视图的方式,但我认为这可能有所帮助:
要显示上一个视图(包含所有按钮),只需在第一个视图顶部加载的视图中使用此代码:
[self dismissModalViewControllerAnimated:YES];
希望它有所帮助!
答案 1 :(得分:0)
这让我觉得是设计模式的问题。我不认为我确切地理解这是如何实现的,但这就是我如何攻击它。
你有QuestionGridViewController塞满了按钮,每个按钮显示一个GameScreenViewController的实例,根据
进行适当配置让我们在这里关注MVC。您需要一个可以容纳每个问题的模型类(并且可能有问题对象来封装该数据)。
您还需要一个代表用户及其详细信息。
在QuestionGrid的viewDidLoad中,加载问题模型中的问题以填充视图。已经完成的那些应该设置刻度标记。
对于所有这些按钮按下,使用自定义初始化程序初始化GameScreen,该初始化程序将用户对象和问题对象作为参数。
提交GameScreen的答案后,更新问题对象。再次加载QuestionGrid时,它会加载更新的问题。视图控制器都不必将任何数据传递给另一个。
这是服从MVC的巨大优势 - 你已经从逻辑中抽象出数据,并且这样做可以解决这些问题。
我不知道这是否是你想要解决的问题,但正如SirKaydian所指出的那样,你做事情的方式并不是特别明显。但是,我希望我已经展示了良好的应用程序设计如何能够消除这些微不足道的问题。