繁体   English   中英

将现有的 tableView 和 ViewController 与 UISearchDisplayController 一起使用

[英]Use existing tableView and ViewController with UISearchDisplayController

我有一个应用程序,通常会在整个应用程序中列出 Wines(全屏或较小的 UIViews)。 我通常调用这个 ViewController,通过分配视图,将委托/等分配给我的主 ViewController,然后通过该委托填充数据。

从想要在屏幕上显示葡萄酒的主视图:

wineListViewController = [[WineListViewController alloc] initWithWines:nil];
wineListViewController.navigationController = self.navigationController;
self.winesTableView.dataSource = wineListViewController;
self.winesTableView.delegate = wineListViewController;
// Table population code goes here

这很好,但现在我正在构建一个搜索方面,我想使用同一个 Viewcontroller 来显示结果,因为我在 cellForRowAtIndexPath 等中有一些复杂的规则。

但是,UISearchDisplayController 想要使用它自己的 tableView,这意味着我必须从 WineListViewController (heightForRow,cellForRow) 复制我的所有代码才能以相同的方式显示。 有没有办法可以将我的 WineListViewController 连接到 UISearchDisplayController 这样我就不会重复代码?

是的。

您需要将UISearchDisplayControllersearchResultsDataSourcesearchResultsDelegate设置为指向WineListViewController的实例(您可以在WineListViewController中的适当位置执行此操作并简单地传递“self” 。UISearchDisplayController的这两个属性与UITableView 的属性dataSource委托。UISearchDisplayController将在原始UITableView上指定 UITableView,并使用这些特定的字符串,您可以将其显示为原始表格。每次更改字符串时都应重新加载搜索结果表视图,并且将调用您的 UITableView 数据源和委托方法。

您可以区分标准 UITableView 和数据源中的 searchResultsTableView 和 WineListViewController 的委托方法,如下所示(例如):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.tableView)
    {
        // Return a standard listing for indexPath.
    }
    else if (tableView == self.searchDisplayController.searchResultsTable)
    {
        // Return a filtered cell, based on a filtered model of the searchDisplayController's searchBar's search string.
    }
}

Y 应该看看 UISearchDisplayController 的委托方法,因为您可以实现这些方法来指定何时刷新搜索显示结果表等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM