Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 返回到根视图控制器_Ios_Objective C_Uiviewcontroller_Appdelegate - Fatal编程技术网

Ios 返回到根视图控制器

Ios 返回到根视图控制器,ios,objective-c,uiviewcontroller,appdelegate,Ios,Objective C,Uiviewcontroller,Appdelegate,我正在为iOS平台编写一个基于回合的游戏。客户端使用CocoaAsyncSocket API与远程服务器通信。现在我正在处理这个案例:客户端已经有一段时间处于非活动状态,并且由于超时而与服务器断开连接。如果是这样,我希望在应用程序进入前台时弹出登录视图,让用户再次登录 我假设我必须在我的应用程序委托的-(void)应用程序中执行此类工作。检查我是否已连接不是问题,但我不知道如何关闭每个显示视图控制器以将我带回根视图(碰巧是登录视图) 我的视图控制器是以模式显示的,但我也有两个带有表视图的导航控制

我正在为iOS平台编写一个基于回合的游戏。客户端使用CocoaAsyncSocket API与远程服务器通信。现在我正在处理这个案例:客户端已经有一段时间处于非活动状态,并且由于超时而与服务器断开连接。如果是这样,我希望在应用程序进入前台时弹出登录视图,让用户再次登录

我假设我必须在我的应用程序委托的-(void)应用程序中执行此类工作。检查我是否已连接不是问题,但我不知道如何关闭每个显示视图控制器以将我带回根视图(碰巧是登录视图)

我的视图控制器是以模式显示的,但我也有两个带有表视图的导航控制器,包括推序列


非常感谢您对这个问题的任何帮助。提前谢谢

如果您的所有内容视图都是从根视图控制器(听起来不是个好主意)以模式显示的,那么从应用程序委托(实际上是在
应用程序中将进入前台


如果根视图控制器没有以模式显示,则需要以适当的方式关闭。如果任何其他“子”视图控制器以模态方式显示,则应将其关闭。我想,当视图控制器更改父视图控制器时,关闭将起作用。您可能需要添加一个通知,通知所有视图控制器所有内容都已被拆除。

不和谐的方法是用新的登录视图控制器替换rootViewController

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    if ([self isDisconnected]) {
        self.window.rootViewController = [MyLoginController new];
    }
}
对于情节提要,假设您的初始情节提要是登录情节提要

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    if ([self isDisconnected]) {
        UIStoryboard *storyboard = self.window.rootViewController.storyboard
        self.window.rootViewController = [storyboard instantiateInitialViewController];
    }
}

根据您的用户体验,这可能合适也可能不合适。

请稍微描述一下您的视图控制器。什么是根视图控制器(导航控制器、自定义)?VCs是否被推送/呈现?只是一个健全性检查-您是否尝试过UINavigationController的-(NSArray*)PoptorootViewController的动画:(BOOL)动画?尝试此操作以切换应用程序上的根视图控制器[[[[[UIApplication sharedApplication]委派]窗口]setRootViewController:myVC];非常感谢。只是一个问题——为什么从根视图以模态方式呈现所有内容是个坏主意?我有一个视图层次结构,所有视图都构建在根视图顶部的堆栈上。你会怎么做?如果你有嵌套的模式显示,你可能会轻易地、不经意地忽略你的整个应用程序内容(并且忽略错误的一个,在错误的级别)。测试应该能够捕捉到这一点,但与推式或自定义子视图相比,更容易出错。我不知道你的应用程序,但我个人会考虑定制容器视图控制器或导航控制器。
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    if ([self isDisconnected]) {
        UIStoryboard *storyboard = self.window.rootViewController.storyboard
        self.window.rootViewController = [storyboard instantiateInitialViewController];
    }
}