我有一个UITableViewController
,我在其中使用Interface Builder添加了一个UISearchBar作为tableHeaderView
。然后我在笔尖中添加了UISearchDisplayController
,并设置了所有连接(delegate
,searchResultsDelegate
,searchContentsController
,searchResultsDataSource
,所有连接都连接到{{ 1}})。
然后,我在代码中实现了所有委托和数据源方法。
它的功能就像一个魅力,除了一个奇怪的错误:有时搜索结果表视图不会滚动,我可以看到它后面的主表视图的闪光指示器。我对UITableViewController
进行了NSLog,显然它是主表视图的子视图,我猜这就是我之前描述的触摸问题背后的原因。
我的错是什么?是否可以searchResultsTableView
使用UITableViewController
?如果是这样,我如何设置它以使结果表视图不被添加为主表视图的子视图?
更新:我发现this sample使用UISearchDisplayController
UISearchDisplayController
,显然搜索表视图也会添加到主表视图中。所以现在我不认为这是我的问题。
事情是,我发现我正在做的和样本正在做什么之间找不到任何实质性的区别。我只是在UITableViewController
中添加UISearchBar
作为UITableView
标题并向其添加UITableViewController
...就像iOS在主表和主表之间混淆了我尝试滚动时搜索表。你有什么想法吗?
更新:添加了200个代表赏金。 请仅在您知道自己在说什么时才回答。
答案 0 :(得分:9)
这是一个额外的self.tableView.scrollEnabled = YES
,在搜索数据请求完成后立即调用。希望它能帮助将来遇到同样问题的任何人。
答案 1 :(得分:3)
搜索显示控制器管理搜索栏和表格视图的显示,该视图显示由另一个视图控制器管理的数据搜索结果。
这里searchDisplaycontroller结合了searchbar和tabelview,它们在tableview中显示结果数据,因此不需要单独的tableview。
当你使用UISerarchBar时,它需要至少有一个UITableView,它可以在视图中显示结果。在这里,您甚至无需添加SearchDisplayController即可查看结果。
答案 2 :(得分:1)
我想您可能想尝试将UISearchDisplayController IBOutlet添加到您的类中,并将其连接到nib文件中的SearchdDisplayController。我很有趣,你的笔尖中的searchdisplay控制器自动将它自己连接到检查器中的默认serachdisaplaycontreoller插座。
答案 3 :(得分:0)
搜索栏控制器使用自己添加的表视图。如果将UISearchDisplayController的delegate和dataSource设置为UITableViewController,则表视图控制器必须在其委托方法中区分两个表视图。如果你没有这样做,这可能会导致你的错误。
换句话说:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.tableView) {
return number of rows in data model;
} else {
perform the search query;
return number of rows in search query;
}
}
您为所有委托和dataSource方法执行类似的操作。
我不是百分之百确定这是导致你的问题的原因,但是如果没有看到更多来源,很难说。