知道推送的viewController是否可见

时间:2015-01-10 22:12:45

标签: ios cocoa-touch storyboard segue

我有一个具有此结构的iOS应用

SplitViewController
  |  |
  |  |________ TableViewControllerA
  | 
  |________ NavigationController > ViewControllerB > ViewController C
                                         |
                                         |
                                    ViewControllerX

一旦VCB加载,它就会在其viewWillAppear上触发一个push segue,显示ViewControllerX。

这个ViewControllerX不在应用程序的常规流程中,它只是一个带有“select one option”消息的viewController,告诉用户在VCA上选择一个选项。

一旦用户在VCA上选择了一个选项,这个VCX就必须消失,揭示落后的VCB。

我在这个VCX上有一个unwind segue来做这件事,但我怎么知道VCX是否可见?

如何对VCA执行操作会触发VCX上的展开segue,这样VCX可以离开并显示VCB落后?

我从VCA尝试了这个但没有效果

  ChooseOption *chooseOption = [[self storyboard] instantiateViewControllerWithIdentifier:@"chooseOption"];
  [chooseOption performSegueWithIdentifier:@"unwindChooseOption" sender:nil];
此时

chooseOption不是零。

2 个答案:

答案 0 :(得分:1)

我会考虑使用NSNotificationCenter。当用户在VCA中执行您要跟踪的内容时,发布通知。让VCX在出现时收听该通知,并在它消失时停止收听。

如果VCX收到通知,它就会解除。如果它不在屏幕上,则没有其他任何关心通知的内容,它会被忽略。

答案 1 :(得分:0)

你可以用不同的方式做到这一点,我认为这实际上取决于上下文。

你有没有尝试过:

if(self.navigationController.visibleViewController == self){

}

if([self.navigationController.visibleViewController isKindOfClass:[VCX class]]){

}

顺便说一下......如果导航控制器以模态方式呈现VCX,您可以这样做:

if([self.navigationController.presentedViewController && [self.navigationController.presentedViewController isKindOfCLass:[VCX class]]){

}