UISearchDisplayController与UITableViewController

时间:2011-07-09 15:27:30

标签: iphone cocoa-touch uisearchdisplaycontroller

我有一个UITableViewController,我在其中使用Interface Builder添加了一个UISearchBar作为tableHeaderView。然后我在笔尖中添加了UISearchDisplayController,并设置了所有连接(delegatesearchResultsDelegatesearchContentsControllersearchResultsDataSource,所有连接都连接到{{ 1}})。 然后,我在代码中实现了所有委托和数据源方法。

它的功能就像一个魅力,除了一个奇怪的错误:有时搜索结果表视图不会滚动,我可以看到它后面的主表视图的闪光指示器。我对UITableViewController进行了NSLog,显然它是主表视图的子视图,我猜这就是我之前描述的触摸问题背后的原因。

我的错是什么?是否可以searchResultsTableView使用UITableViewController?如果是这样,我如何设置它以使结果表视图不被添加为主表视图的子视图?

更新:我发现this sample使用UISearchDisplayController UISearchDisplayController,显然搜索表视图也会添加到主表视图中。所以现在我不认为这是我的问题。

事情是,我发现我正在做的和样本正在做什么之间找不到任何实质性的区别。我只是在UITableViewController中添加UISearchBar作为UITableView标题并向其添加UITableViewController ...就像iOS在主表和主表之间混淆了我尝试滚动时搜索表。你有什么想法吗?

更新:添加了200个代表赏金。 请仅在您知道自己在说什么时才回答。

4 个答案:

答案 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方法执行类似的操作。

我不是百分之百确定这是导致你的问题的原因,但是如果没有看到更多来源,很难说。