从类中返回初始视图控制器

时间:2013-06-13 21:26:44

标签: ios objective-c xcode

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

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

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

但是我的应用程序有很多视图控制器,所以有什么方法可以通过EAController类返回初始视图控制器吗?

感谢。

6 个答案:

答案 0 :(得分:0)

在您的应用代表处理通知。

答案 1 :(得分:0)

你的解释有点模糊,一些代码可能会帮助我更好地理解问题,但听起来像UINavigationController popToRootViewControllerAnimated:可能就是你想要的。

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

答案 2 :(得分:0)

如果您使用的是UINavigationController,那么我们就可以了 -popToRootViewControllerAnimated:方法

答案 3 :(得分:0)

如果您正在处理故事板和segues,您应该查看展开 segues。网上有几个很好的教程,例如。

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

答案 4 :(得分:0)

if you are using UInavigationController:
for(UIViewController* vc in self.navigationController.viewControllers)                                                                if([vc isKindOfClass:FirstViewController] 
     {
       [self.navigationController popToViewController:vc anmated:YES];
       break;
     }

答案 5 :(得分: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]];