我的应用程序有一个 UITabBarController,它允许用户在屏幕之间切换。
有两个屏幕。
Tab1:viewController A - 它是
UIViewController
的子类。它的顶部有一个 UiSearchBar,下面有其他不相关的内容。
Tab2:viewController B - 是
UITableViewController
的子类,也符合 UISearchBarDelegate
和 UISearchDisplayControllerDelegate
。
此视图顶部有一个
UISearchBar and DisplayController
。
这就是我想在我的应用程序中实现的功能:
当用户在 viewController A 中开始搜索时 - 一些结果将显示在搜索栏下方。然后,当用户点击搜索结果时,viewController B 将出现在屏幕上并显示结果。这将允许我根据我认为合适的方式过滤和排列结果。
如果有人看过最新版本的 eBay iOS 应用程序 - 我正在尝试使用搜索功能。
问题
我不担心搜索如何工作以及过滤如何工作等。我想知道的是如何链接第一个 UISearchBar 来显示结果并将用户带到 viewController B - 以及他们的搜索词?
如果我查看 eBay 应用程序 - 它几乎就像栏是同一个实例,因为它保留了搜索文本。
我会: 在您的
UIViewController
A 中写入协议 XYZ
对您的
UITabBarController
进行子类化并使其符合 XYZ
用户在
UIViewController
A 中按下搜索结果后,向委托人(您的 UITabBarController
)发送一条消息,让他处理数据(您的搜索对象数组或您需要的任何内容)传输并切换到 UIViewController
B
看看 SA 上关于 UIViewController 之间传输数据的问题: 在视图控制器之间传递数据
在控制器之间传递数据对于简单的程序来说效果很好,但我发现随着应用程序变得更加复杂,它会变得令人困惑。 另一种方法是创建一个真实的数据模型……MVC 中的“M”。
提供对应用程序状态的访问的主要模型类可以是带有
sharedInstance
的单例,也可以是应用程序委托拥有的唯一对象。 通过这种结构,控制器之间不会直接传递数据。 相反,任何需要更改状态的控制器都会告诉模型这样做,并且任何需要了解状态的控制器在显示或更新视图时都会向模型询问状态。