UISearchBar与Controller在正常的UIView中?

时间:2009-12-11 21:20:58

标签: iphone uisearchbar uisearchdisplaycontroller

我想要的是什么:

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

我尝试了什么:

在Interface Builder中:

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

在代码中:

  • 将UISearchBarDelegate,UISearchDisplayDelegate协议添加到UITableViewController

我得到了什么:

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

结论:

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

2 个答案:

答案 0 :(得分: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 noob。

答案 1 :(得分:0)

首先,如果您的Controller类是从UITableViewController扩展的,那么如果您正在使用Interface Builder,则不能在其中包含搜索栏。相反,从UIViewController扩展并自己符合表数据源和委托协议。

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