我正在处理的应用程序有三个选项卡,都有一个搜索栏,用户可以在任何选项卡上启动搜索。启动搜索时,会将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
被推入堆栈。
答案 0 :(得分:1)
因此,我提出的解决方案是向NavigationController
类添加委托协议,该类提供SearchVC
并将NavigationController
的消息发送到UITabBarController
该搜索被介绍了。
UITabBarController
上的委托方法然后遍历其导航控制器数组并解除选项卡上的SearchVC
,如果它不是当前选中的那个(self.selectedViewController
通过将堆栈弹出到SearchVC
然后将其弹出:
[self popToViewController:searchViewController animated:NO];
[super popViewControllerAnimated:NO];