在单击按钮时重置/重新初始化/重新启动 UIViewController 视图的最简单(正确)方法是啥?

Posted

技术标签:

【中文标题】在单击按钮时重置/重新初始化/重新启动 UIViewController 视图的最简单(正确)方法是啥?【英文标题】:What is the easiest (correct) way to reset/reinitialize/restart the view of a UIViewController on button click?在单击按钮时重置/重新初始化/重新启动 UIViewController 视图的最简单(正确)方法是什么? 【发布时间】:2012-10-11 15:23:06 【问题描述】:

我在 UiViewController 中有一个简单的游戏(没有游戏引擎,例如 Cocos2d),当我输掉游戏时,我有一个重新启动游戏的按钮。

所以,我拥有的是

    - (IBAction) restart:(id)sender 
        \\Some incorrect way of reseting my view
    

我试过了

    - (IBAction) restart:(id)sender 
        [self viewDidLoad];
    

但随后我的视图中出现了多个图形副本... 实现此方法的正确方法是什么?

注意:我使用的是 ARC。

【问题讨论】:

【参考方案1】:

听起来好像这是一个单视图应用程序。有了这个假设,您是否能够创建重新启动方法,并且在此方法中您只需检查变量和值是否已初始化、具有值或未创建。您将检查是否需要创建变量或简单地重置它们并创建“开始”状态。

我打算使用此方法首先通过调用 viewDidLoad 内部的方法来初始化和启动游戏,并在您打算重置时调用该重置方法来清除游戏。您不想使用viewDidLoad,因为它只打算在视图初始化并首次加载时运行。

【讨论】:

【参考方案2】:

正如您所发现的,viewDidLoad: 旨在由应用框架调用,而不是由您的代码调用。

您的问题的答案实际上取决于您的游戏逻辑。视图不知道如何重置自己,除非您告诉它要显示什么作为其起始状态。

【讨论】:

不可能转储所有图形并重新加载视图,就好像它被称为“从一开始”一样。所以我必须手动重置所有变量和视图? 您可以删除视图并创建它的新实例,但如果原始视图是在 xib 或情节提要中创建的,那并不是最简单的事情。一个更好的主意是拥有一个带有菜单的视图控制器和另一个带有游戏视图的视图控制器。第二个将在您单击菜单上的“播放”时创建,并在单个游戏完成时删除。【参考方案3】:

如果你想回到开头,那么你应该创建一个新的视图控制器实例(它将从头开始重新创建它的视图)。按钮的操作方法需要连接到最初实例化视图控制器的任何类。如何做到这一点,取决于您的应用程序的结构。

【讨论】:

以上是关于在单击按钮时重置/重新初始化/重新启动 UIViewController 视图的最简单(正确)方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

统一单击重新启动按钮后如何显示广告然后重新启动场景?

Unity - 单击重新启动按钮后如何重新启动乐谱?

如何使值不重置每个页面重新加载?

重新启动后,按钮单击时,小组件onUpdate未设置pendingIntent

如何创建不会在页面重新加载时重置的 JSP 变量

IBM Mobilefirst:单击通知时应用程序重新启动