知道推送的 viewController 是否可见

Knowing if a pushed viewController is visible

我有一个 iOS 具有这种结构的应用程序

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

VCB 加载后,它会在显示 ViewControllerX 的 viewWillAppear 上触发推送转场。

这个 ViewControllerX 不在应用程序的常规流程中,它只是一个 viewController 与消息 "select one option" 一起显示,告诉用户 select 一个选项在 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];

此时 choseOption 不为零。

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

你试过吗:

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

}

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

}

顺便说一句...如果 VCX 由 navigationControlller 模态呈现,您可以这样做:

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

}

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

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