0

我正在构建一个使用蓝牙进行通信的应用程序,并且我有一个名为EAController(NSObject) 的类来处理附件委托。

因此,如果手机失去蓝牙通信,则在 EAController 中调用附件委托方法,我可以在其中显示警报。我想要做的是在失去通信时显示警报并返回初始视图控制器。

我知道我可以添加一个通知,并让所有视图控制器监听它,并且当前视图控制器可以处理“返回第一个视图控制器”操作。

但是我的应用程序有这么多视图控制器,那么有什么办法可以通过类回到初始视图控制器EAController

谢谢。

4

6 回答 6

0

如果您正在使用故事板和转场,您应该研究展开转场。网上有几个很好的教程。例如。

http://cocoatouch.blogspot.nl/2013/02/unwinding-segues-in-storyboard.html

于 2013-06-13T22:28:14.307 回答
0

在您的应用委托中处理通知。

于 2013-06-13T21:33:06.527 回答
0

您的解释有点含糊,一些代码可能会帮助我更好地理解问题,但听起来 UINavigationControllerpopToRootViewControllerAnimated:可能是您正在寻找的。

如果 EAController 是一个 UIViewController,并且已经添加了一个导航控制器,它应该有一个导航控制器的引用来调用该方法。

于 2013-06-13T21:33:47.933 回答
0

如果您使用的是UINavigationController,您可以使用该 -popToRootViewControllerAnimated:方法

于 2013-06-13T21:33:59.290 回答
0

popToRootViewControllerAnimated:会做你想做的。如果您在无法直接访问的代码部分中,UINavigationController您可以推送一个事件并配置您的导航控制器以接收它。像这样:

你的导航控制器在哪里:

UINavigationController *navController = [[UINavigationController alloc] init];

// subscribe to the notification
[[NSNotificationCenter defaultCenter] addObserverForName:@"goBack!" 
                                                  object:nil 
                                                   queue:nil 
                                              usingBlock:^(NSNotification *notification) {

    // pop!
    [navController popToRootViewControllerAnimated:YES];
}];

现在,代码中的其他地方......当你想返回时执行此操作:

// post the notification
[[NSNotificationCenter defaultCenter] postNotification:
    [[NSNotification alloc] initWithName:@"goBack!" 
                                  object:nil 
                                userInfo:nil]];
于 2015-04-23T23:59:30.620 回答
0
if you are using UInavigationController:
for(UIViewController* vc in self.navigationController.viewControllers)                                                                if([vc isKindOfClass:FirstViewController] 
     {
       [self.navigationController popToViewController:vc anmated:YES];
       break;
     }
于 2013-06-13T23:29:09.633 回答