整个应用程序使用相同的 UISearchBar?

Posted

技术标签:

【中文标题】整个应用程序使用相同的 UISearchBar?【英文标题】:Same UISearchBar for entire app? 【发布时间】:2014-01-08 03:18:13 【问题描述】:

我看到很多应用都有一个始终位于应用顶部的通用搜索栏。我在一个视图控制器中实现了UISearchBarUITableView。我想在我的应用程序的其他视图控制器上拥有相同的搜索栏。我如何将这些其他UISearchBars 链接到我已经创建的那个?即,如何配置这些其他 UISearchBars 以便它们返回相同的搜索结果并链接到相同的 UITableView

【问题讨论】:

【参考方案1】:

您可能需要嵌套视图控制器。

定义一个“顶视图控制器”来管理一个包含搜索栏的“顶视图”,并将您的(表格)视图添加到顶视图(在顶视图上使用-addSubview:)和相关的视图控制器到顶部视图控制器(在顶部 VC 及其自身上使用 -addChildViewController:)。

在 Interface Builder 中,您可以定义一个顶视图,并在其中定义一个“容器视图”。然后系统处理子视图和子视图控制器的插入。

通过定义良好的视图控制器层次结构,您可以使您的应用设计更加合乎逻辑和简洁。我建议在深入编码之前花一些时间研究一个好的层次结构。

最后一点:UISearchDisplayController 是一个对象(显然不是视图控制器),它在视图控制器的视图上方叠加了一个搜索栏。您也许可以简单地将它应用到最顶层的视图控制器(始终可见的视图控制器,如导航控制器)之上。值得研究一下,如果你还没有。 ;-)


一个例子

视图控制器层次结构

XYZTopViewController(管理XYZTopViewUINavigationController(管理 Apple 定义的私有导航视图层次结构) XYZFirstPageViewController(管理XYZFirstPageView)(“根”视图控制器) XYZSecondPageViewController(管理XYZSecondPageView)(在需要时由导航控制器推送)

查看层次结构

XYZTopView UISearchBar (Apple 定义的私有导航视图层次结构) XYZFirstPageView (属于第一页/屏幕的视图层次结构)

【讨论】:

【参考方案2】:

因为每个应用程序只有一个窗口,而视图没有 级别,您必须确保视图保持在层次结构的顶部, 无论。一种相对简单的方法是将其直接添加到 界面其余部分(导航控制器)上方的窗口:

How to show a uiview alway on top?

在 applicationDidLaunch 中:

// After the main navigation controller or tab controller has been added
// either programmatically or in the xib:
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0,70,320,44)];
[self.window addSubview:searchBar];

【讨论】:

以上是关于整个应用程序使用相同的 UISearchBar?的主要内容,如果未能解决你的问题,请参考以下文章

Swift iOS 8+ UISearchBar图标,占位符和文本居中

TableView Cell -> UISearchBar : 对数据进行排序,其中关键字匹配最多的记录应先显示,然后再向最少

选择标签栏项目时激活 UISearchBar - 帮助还是阻碍?

iOS7 上的 UISearchBar 着色不一致

UISearchBar 与 iMac Finder 搜索功能相同

为啥黑色半透明 UIToolbar 的顶部与黑色半透明 UISearchBar 不同,如何使它们看起来相同?