1

我想要的是:

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

我试过的:

在界面生成器中:

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

在代码中:

  • 将 UISearchBarDelegate、UISearchDisplayDelegate 协议添加到 UITableViewController

我得到了什么:

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

综上所述:

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

4

2 回答 2

3

好的,所以我想通了。我发誓这是我尝试的第一件事,但显然我没有正确地做到这一点。

在我的 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 菜鸟。

于 2009-12-12T06:29:06.513 回答
0

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

但是,是的,要使这个答案对您有好处,您将不得不在您的问题中添加一些代码或其他内容。

于 2009-12-11T21:38:43.547 回答