Objective-C / Xcode 6:让搜索栏填充表格视图的最佳方法是什么?

时间:2014-10-10 18:28:11

标签: ios xcode uisearchdisplaycontroller

我的桌面视图上面有一个搜索栏。我的目的是让用户在搜索栏中输入一个查询,并在表格视图中填入结果 - 无论是当用户按Enter键还是键入时。

在阅读了大量教程后,我为搜索栏选择了搜索栏和搜索显示控制器。但是,与filter-existing-table-view-data工具相比,这个控制器似乎不是一个enter-query-then-display-results工具。这意味着我正在查看已经拥有所有数据的表视图,并在我键入时进行过滤 - 我想要的是获取空表视图并填充它。

我想知道是否有办法使用搜索栏和搜索显示控制器来达到我想要的效果,或者有一种首选方式?

3 个答案:

答案 0 :(得分:2)

这两个Ray Wenderlich教程非常适合学习如何在UITableViews中实现搜索。

This tutorial涵盖了Objective-C的基本搜索栏。 This tutorial使用Swift覆盖了搜索栏。

基本上(这里是非常基本的实施水平)你会想知道你是否在搜索。如果您不进行搜索,则可以使用tableView:numberOfRowsInSection:方法返回0,否则返回结果计数。然后在tableView:cellForRowAtIndexPath:方法中,您可以根据结果自定义正在显示的单元格。

答案 1 :(得分:1)

使用UISearchDisplayController时,您将有两个UITableView。搜索视图控制器中的那个。因此,假设您正在将UITableView的两个数据源连接到UIViewController,只需检查传入的表,如果不是用于搜索,则不返回任何内容。

例如

- (NSArray *) _sectionArrayForTable:(UITableView *) tableView {
    if (tableView == self.searchDisplayController.searchResultsTableView) {
        // Return your search results
    }

    // Show nothing when not searching
    return 0;
}

答案 2 :(得分:0)

当文本发生变化时,您需要确定要为该字符串显示哪些结果并更新某些数组或字典。实现tableview数据源方法以显示该数组/字典的内容,并在文本更改时调用reload表