gpt4 book ai didi

ios - 使用 UISearchController 搜索 TableView

转载 作者:行者123 更新时间:2023-11-29 12:20:59 25 4
gpt4 key购买 nike

我知道 Apple 弃用了旧的搜索显示 Controller 。我有一个包含数据的表,我只是制作一个搜索栏,允许用户使用搜索栏从 TableView 中搜索数据(此数据仅包含字母名称)。我曾经尝试使用以下代码来检测用户是否正在输入内容:

if(tableView == self.searchDisplayController.searchResultsTableView)

但我不能,因为 Apple 已经弃用了旧方法。我知道我现在必须使用 UISearchController,我已经查看了 Apple 的文档和他们提供的示例代码,但我一直无法理解。我到处都看过,但没有找到关于如何使用 objective-c 执行此操作的可靠示例/教程。谁能解释一下我们如何将 tableview 与 UISearchController 结合使用以允许用户搜索数据?

最佳答案

我有一个简单的演示项目 here

您需要一个 TableviewController 来显示数据,一个 TableviewController 来显示搜索结果

例如,(链接中演示项目的代码)

声明一个SearchResultViewController

@interface SearchResultViewController : UITableViewController

然后在主 TableView 中

@interface SearchTableViewController()<UISearchBarDelegate,UISearchResultsUpdating>
@property (strong,nonatomic)NSMutableArray * dataArray;
@property (strong,nonatomic)UISearchController * searchcontroller;
@property (strong,nonatomic)SearchResultViewController * resultViewController;
@end

在viewDidLoad中,设置一切

self.resultViewController = [[SearchResultViewController alloc] init];
self.searchcontroller = [[UISearchController alloc] initWithSearchResultsController:self.resultViewController];
self.searchcontroller.searchBar.delegate = self;
self.resultViewController.tableView.delegate = self;
[self.searchcontroller.searchBar sizeToFit];
self.searchcontroller.searchResultsUpdater = self;
self.searchcontroller.dimsBackgroundDuringPresentation = NO;
self.definesPresentationContext = YES;
self.tableView.tableHeaderView = self.searchcontroller.searchBar;

然后在委托(delegate)方法中,进行真正的搜索并更新searchResultViewController

#pragma mark - search bar delegate
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
[searchBar resignFirstResponder];
}
#pragma mark - UISearchResultUpdating
//Do real search,this is up to you
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController{
NSString * searchtext = searchController.searchBar.text;
NSArray * searchResults = [self.dataArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
BOOL result = NO;
if ([(NSString *)evaluatedObject hasPrefix:searchtext]) {
result = YES;
}
return result;
}]];
SearchResultViewController *tableController = (SearchResultViewController *)self.searchcontroller.searchResultsController;
tableController.dataArray = searchResults;
[tableController.tableView reloadData];

}

关于ios - 使用 UISearchController 搜索 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com