我的应用程序处理打开电子邮件附件。要在我的AppDelegate
中执行此操作,请使用RootViewController
调用我的专用ViewController,这是我的应用的popToRootViewControllerAnimated:
。
我在RootViewController的viewWillAppear
和viewDidAppear
中进行了一些处理,但如果在切换到邮件应用程序之前显示的视图控制器是我的RootViewController,则不会调用它们。
案例1:未调用常用viewWillAppear / viewDidAppear方法: (RootViewController - >切换到Mail App - >在我的应用中打开附件 - >在AppDelegate中popToRootViewControllerAnimated - > RootViewController)
案例2:通常的viewWillAppear / viewDidAppear方法被调用: (OtherViewController - >切换到Mail App - >在我的应用中打开附件 - >在AppDelegate中popToRootViewControllerAnimated - > RootViewController)
在互联网上找到这个技巧,但它在案例1中不起作用:http://www.idev101.com/code/User_Interface/UINavigationController/viewWillAppear.html
如何解决此问题并始终调用常用的viewWillAppear / viewDidAppear方法?
答案 0 :(得分:0)
听起来是因为在案例1中,在您的应用程序的上下文中,您的RootViewController已经“可见”,因此popToRootViewController
无需执行任何操作。
答案 1 :(得分:0)
viewWillAppear:
和viewDidAppear:
方法。在应用程序之间切换时,不会调用这些方法。您应该依赖于appDelegate中的applicationWillEnterForeground:
和applicationDidBecomeActive:
方法。
还有一点需要注意的是,当你在做什么时
RootViewController -> popToRootViewControllerAnimated -> RootViewController
您的根视图控制器视图已经可见,因此它不会触发viewWillAppear:
和viewDidAppear:
方法。
我建议你做类似的事情
RootViewController.m
-(void)viewDidAppear:(BOOL)animated
{
[self doSomething];
}
-(void)doSomething
{
//Your functionality
}
AppDelegate.m
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[self.window.rootViewController doSomething];
}
您还可以将根视图控制器添加为UIApplicationDidBecomeActiveNotification
或UIApplicationWillEnterForegroundNotification
答案 2 :(得分:0)
您的视图控制器已经可见,因此无法调用viewWillAppear是正常的。
如果您想知道用户何时返回您的应用,只需在RootViewController init方法中添加以下代码:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(willEnterForeground:)
name: UIApplicationWillEnterForegroundNotification
object:nil];
并在
中实现您想要的内容- (void)willEnterForeground:(NSNotification *)notification
不要忘记在取消分配RootViewController时停止观察:
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}