我想要的是什么:
顶部有UISearchBar的UIView。开始编辑searchBar使当前视图变暗并显示来自另一个[UITableView]控制器的搜索结果。
我尝试了什么:
在Interface Builder中:
在代码中:
我得到了什么:
点击以编辑搜索字段会导致应用崩溃。没有错误消息,只调用UITableViewController中的“viewDidLoad”方法。
结论:
如何为UIView中的UISearchBar使用外部控制器?
答案 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的子类,并且适应UISearchBarDelegate
和UISearchDisplayDelegate
协议。
现在我考虑一下,使用从IB链接的一个也可能同样有效(并且以同样的方式)......
所以上面对我有用,但是现在结果tableView没有显示,除非我手动将它添加到主视图:[self.view addSubview:sc.tableView];
但是这是另一个问题的补充,我想。
在非自我委托的UISearchDisplayController上没有任何关于网络的文档(就我的google-fu而言),所以希望有一天这会帮助另一个Obj-C noob。
答案 1 :(得分:0)
首先,如果您的Controller类是从UITableViewController扩展的,那么如果您正在使用Interface Builder,则不能在其中包含搜索栏。相反,从UIViewController扩展并自己符合表数据源和委托协议。
但是,是的,因为这个答案对你来说是一个好的答案,你将不得不在你的问题中添加一些代码或其他东西。