【问题标题】:How to pop a view controller from a stack when a particular ViewController class was pushed onto stack in another tab?当特定 ViewController 类被推入另一个选项卡中的堆栈时,如何从堆栈中弹出视图控制器?
【发布时间】:2016-07-11 01:47:35
【问题描述】:

我正在开发的应用程序有三个标签,它们都有一个搜索栏,用户可以在任何标签上启动搜索。当搜索开始时,SerchViewController 被推送到每个相应的堆栈上。目前,当用户在选项卡之间切换时,会进行三种不同的搜索。如何确保只有一个 SearchVC 处于活动状态,并且当用户在不同的选项卡上开始搜索时,另一个 SearchVC 在前一个选项卡中从堆栈中弹出?

我该怎么做:

1) 在其中一个堆栈上保留对现有 SearchVC 实例的引用,

2) 如果出现SearchVC,则从另一个导航控制器堆栈接收通知,

3) 并在前一个堆栈中将其弹出(以及所有后续 VC)?

例如:

用户点击第一个选项卡,堆栈构建如下:

UITabBarController -> UINavigationController -> ProfileVC -> GalleryVC -> SearchVC -> (理论上,来自SearchVC的堆栈几乎可以无限建立)-> ProfileVC来自搜索结果 -> GalleryVC -> LikesVC -> ProfileVC -> 等等

用户点击第二个选项卡,堆栈构建如下:

UITabBarController -> UINavigationController -> LibraryVC -> SearchVC -> 再次,堆栈几乎可以无限地从这里构建。我需要在第一个选项卡中弹出SearchVC,因此在选项卡之间切换时只有一个SearchVC。当用户返回到第一个选项卡时,它应该将用户带到用户开始搜索之前的GalleryVC 或VC,并且SearchVC 被压入堆栈。

【问题讨论】:

    标签: ios uiviewcontroller tabs uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    所以,我想出的解决方案是向提供 SearchVC 的 NavigationController 类添加一个委托协议,并将来自 NavigationController 的消息发送到提供搜索的 UITabBarController。

    UITabBarController 上的委托方法然后遍历其导航控制器数组并通过将堆栈弹出到 @987654328 来关闭选项卡上的 SearchVC(如果它不是当前选择的选项卡 (self.selectedViewController) @ 然后将其弹出:

    [self popToViewController:searchViewController animated:NO];
    [super popViewControllerAnimated:NO];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2011-02-27
      • 2020-10-12
      • 2019-08-08
      • 1970-01-01
      相关资源
      最近更新 更多