【问题标题】:Knowing if a pushed viewController is visible知道推送的 viewController 是否可见
【发布时间】:2015-03-09 00:37:35
【问题描述】:

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

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

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

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

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

我在这个 VCX 上有一个放松的 segue 来做到这一点,但我怎么知道 VCX 是否可见?

在 VCA 上执行的操作如何触发 VCX 上的 unwind segue,以便 VCX 可以离开并显示背后的 VCB?

我已经从 VCA 尝试过,但没有效果

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

此时选择选项不为零。

【问题讨论】:

  • chooseOption 可能不为零,但它也不是您想要放松的 VCX 实例。 (我假设 ChooseOption == VCX。)

标签: ios cocoa-touch storyboard segue


【解决方案1】:

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

如果 VCX 收到通知,它将展开。如果它不在屏幕上,则其他任何东西都不会关心通知,它会被忽略。

【讨论】:

    【解决方案2】:

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

    你有没有尝试过:

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

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

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

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

    【讨论】:

    • 好的,明白了!谢谢!
    • 哈哈太好了,很高兴听到:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多