您应该在应用程序委托类中定义一个(公共)方法,并在必要时调用它。在该方法中,您应该重新实例化初始视图控制器并将其设置为 UIWindow 实例的根视图控制器(您应该有一个 ivar)。
AppDelegate.h:
- (void) resetApp;
AppDelegate.m:
- (void) resetApp {
TopViewController* controller = [[TopViewController alloc] init];
_window.rootViewController = controller;
}
编辑:如果您使用情节提要,则此代码有效:
应用委托。迅速 (因为它是 2017 年):
func resetApp() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let newRoot = storyboard.instantiateInitialViewController() else {
return // This shouldn't happen
}
self.window?.rootViewController = newRoot
}
(这假设您的应用程序的初始故事板 - Info.plist 中指定的那个 - 称为“Main.storyboard”)
如果您的应用程序设计为在此重置发生时可能正在进行长时间或异步操作,则应考虑额外的考虑来处理它们。对于初学者,所有未实现为单例或由此类长寿命对象保留的视图控制器都可能被释放。