当我的孩子执行展开时,我的控制器的viewDidAppear被调用.
在这种方法中(仅仅这种方法,我需要知道是否来自放松)
注意:孩子正在放松到第一个视图控制器,所以这是一个中间视图控制器,而不是真正的根.
解决方法
如果视图控制器的曝光是由于被推送/呈现而导致的,或者由于弹出/关闭/展开而导致暴露,则应该能够使用以下内容来检测每个控制器.
这可能或可能足以满足您的需求.
- (void) viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; // Handle controller being exposed from push/present or pop/dismiss if (self.isMovingToParentViewController || self.isBeingPresented){ // Controller is being pushed on or presented. } else{ // Controller is being shown as result of pop/dismiss/unwind. } }
如果你想知道viewDidAppear是被调用的,因为一个放松的segue与传统的pop / dismiss被调用不同,那么你需要添加一些代码来检测是否发生了一个展开.为此,您可以执行以下操作:
对于任何中间控制器,您只需要检测出来,就可以添加以下形式的属性:
/** BOOL property which when TRUE indicates an unwind occured. */ @property BOOL unwindSeguePerformed;
然后覆盖展开方法canPerformUnwindSegueAction:fromViewController:withSender:方法如下:
- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender{ // Set the flag indicating an unwind segue was requested and then return // that we are not interested in performing the unwind action. self.unwindSeguePerformed = TRUE; // We are not interested in performing it,so return NO. The system will // then continue to look backwards through the view controllers for the // controller that will handle it. return NO; }
现在你有一个标志来检测放松和一种在发生之前检测放松的方法.然后调整viewDidAppear方法来包含这个标志.
- (void) viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; // Handle controller being exposed from push/present or pop/dismiss // or an unwind if (self.isMovingToParentViewController || self.isBeingPresented){ // Controller is being pushed on or presented. // Initialize the unwind segue tracking flag. self.unwindSeguePerformed = FALSE; } else if (self.unwindSeguePerformed){ // Controller is being shown as a result of an unwind segue } else{ // Controller is being shown as result of pop/dismiss. } }
希望这符合您的要求.
有关处理展开链的文档,请参阅:https://developer.apple.com/library/ios/technotes/tn2298/_index.html