在 UITableView Objective-C 中实现 UISearchController

Posted

技术标签:

【中文标题】在 UITableView Objective-C 中实现 UISearchController【英文标题】:Implement UISearchController in UITableView Objective-C 【发布时间】:2015-09-25 00:33:25 【问题描述】:

我正在按照本教程在我的项目中实现UISearchController:http://useyourloaf.com/blog/updating-to-the-ios-8-search-controller.html

我成功找到了不推荐使用的方法 (searchDisplayController),但我想实现 UISearchController

好吧,在我看来DidLoad 我已经实现了:

//UISearchController
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchBar.delegate = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
self.searchController.searchBar.scopeButtonTitles = @[];
self.definesPresentationContext = YES;
[self.searchController.searchBar sizeToFit];

在我的numberOfRowsInSection 中,我已将旧代码用于searchDisplayController

if (table == self.searchDisplayController.searchResultsTableView)

    return [self.searchResults count];

else

    return [self.allUsers count];

在我的cellForRowAtIndexPath

NSArray *sourceData = (tableView == self.searchDisplayController.searchResultsTableView ? self.searchResults : self.allUsers);
PFUser *selected = [sourceData objectAtIndex:indexPath.row];
NSString *name = [[sourceData objectAtIndex:indexPath.row] valueForKey:@"surname"];
cell.textLabel.text = name;

并添加了这些方法:

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController

    NSString *searchString = searchController.searchBar.text;
    [self searchForText:searchString];
    [self.tableView reloadData];
    NSLog(@"updateSearchResultsForSearchController");


- (void)searchForText:(NSString*)searchText

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"surname contains[c] %@", searchText];
    self.searchResults = [self.allUsers filteredArrayUsingPredicate:predicate];



- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope

    [self updateSearchResultsForSearchController:self.searchController];

好吧,当我点击搜索栏并点击一些单词时,会出现日志updateSearchResultsForSearchController。但是我搜索的人没有出现。我不知道我要为此实施什么?也许我的searchForText:searchString 方法不对?

或者,也许我必须在我的 cellForRowAtIndexPathnumberOfRowsInSection 中添加一些内容?

【问题讨论】:

【参考方案1】:

首先,您应该检查self.searchResults.count。如果self.searchResults.count > 0,方法searchForText:searchString是对的。所以你在 tableView 中检查问题。

【讨论】:

感谢您的回复!我在哪里检查 self.searchResults.count > 0 ?这在 cellForRow 中不起作用(从不 > 0) 您可以在“self.searchResults = [self.allUsers filteredArrayUsingPredicate:predicate];”行之后检查。确保文本输入包含在您的 self.allUsers 中。 解决了!!!!谢谢,我用 if 条件更改了 cellForRow:self.searchResults.count > 0,numberOfRowsInSection 同上! :)

以上是关于在 UITableView Objective-C 中实现 UISearchController的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Objective-C 的 UITableView 中使 UITableViewRowAction 完全透明

如何在objective-C中制作平滑的UITableView [关闭]

Objective-C UI之UITableView详解

如何使用 UIImages 创建 UITableView? - 可可/Objective-C

如何在 Objective-C 中的 UITableview 的 Row 和 Section 上添加一个 UIButton

在 UITableView Objective-C 中实现 UISearchController