UISearchBar 与普通 UIView 中的控制器?

Posted

技术标签:

【中文标题】UISearchBar 与普通 UIView 中的控制器?【英文标题】:UISearchBar with Controller in a normal UIView? 【发布时间】:2009-12-11 21:20:57 【问题描述】:

我想要什么:

顶部带有 UISearchBar 的 UIView。开始编辑 searchBar 会使当前视图变暗并显示来自另一个 [UITableView]Controller 的搜索结果。

我的尝试:

在界面生成器中:

向 UIView 添加“搜索栏和搜索显示控制器”。 为我的 UITableViewController 添加一个占位符对象 添加一个 UITableView 对象并将其设置为 UITableViewController 的视图 将 UISearchBar 的委托设置为 UITableViewController 将 UISearchDisplayController 上的所有 outlet 设置为 UITableViewController

在代码中:

将 UISearchBarDelegate、UISearchDisplayDelegate 协议添加到 UITableViewController

我得到了什么:

点击编辑搜索字段会使应用程序崩溃。没有错误消息,只有 UITableViewController 中的“viewDidLoad”方法被调用。

结论:

如何为 UIView 中的 UISearchBar 使用外部控制器?

【问题讨论】:

"点击编辑搜索字段会使应用程序崩溃。"您应该能够调试应用程序崩溃的位置。在调试模式下运行时,堆栈跟踪是什么? 【参考方案1】:

好的,我想通了。我发誓这是我尝试过的第一件事,但显然我做得不对。

在我的 UIViewController(其中包含 UISearchBar)中,我实例化了一个 UISearchDisplayController

// sb = IBOutlet UISearchBar  
sc = [[SearchController alloc] initWithStyle:UITableViewStylePlain];  
sdc = [[UISearchDisplayController alloc] initWithSearchBar:sb contentsController:sc];  
sb.delegate = sc;  
sdc.delegate = sc;  
sdc.searchResultsDelegate = sc;  
sdc.searchResultsDataSource:sc = sc;  `

其中 SearchController 是我的 UITableViewController 的子类,并适应 UISearchBarDelegateUISearchDisplayDelegate 协议。

现在我想一想,使用从 IB 链接的一个可能同样有效(并且以相同的方式)...

所以上面的方法对我有用,但现在结果 tableView 不会显示,除非我手动将它添加到主视图:[self.view addSubview:sc.tableView]; 但我想这是另一个问题的素材。

网络上没有任何关于非自我委托 UISearchDisplayController 的文档(就我的 google-fu 而言),所以希望有一天这对另一个 Obj-C 菜鸟有所帮助。

【讨论】:

【参考方案2】:

一方面,如果您的 Controller 类是从 UITableViewController 扩展而来的,那么如果您使用的是 Interface Builder,那么您就不能在其中包含搜索栏。相反,从 UIViewController 扩展并自行遵守 Table Data Source 和 Delegate 协议。

但是,是的,要让这个答案对你来说是一个好的答案,你将不得不在你的问题中添加一些代码或其他东西。

【讨论】:

我不想要 UITableViewController 中的搜索栏。我希望该控制器向另一个视图中的 UISearchBar 提供结果的 tableView,该视图由单独的视图控制器控制。 根据 Apple 的指南,每个屏幕应该只有一个视图控制器。

以上是关于UISearchBar 与普通 UIView 中的控制器?的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 以编程方式移动 UISearchBar

为啥我的 UIView 不显示 UISearchBar

在 tableHeaderView 中使用 UIView 创建 UISearchBar 行为

UIToolbar 内部的 UIView 内部的 UISearchBar 背景颜色问题

iOS中的UISearchBar

搜索栏UISearchBar的使用