SearchController 不搜索自定义 UITableViewCells

Posted

技术标签:

【中文标题】SearchController 不搜索自定义 UITableViewCells【英文标题】:SearchController not searching custom UITableViewCells 【发布时间】:2016-02-23 22:41:16 【问题描述】:

不确定标题是否有意义,所以这里是对正在发生的事情的描述:

我有一个 UITableViewController 使用自定义 UITableViewCell 来存储它的数据。然后我手动将 searchBar 添加到 UITableView 的标题并根据本教程进行设置:http://useyourloaf.com

现在 searchBar 已经设置好了,看起来它正在工作,但问题是我实际上没有得到任何结果并且表格没有正确加载(搜索结果,它可以正常加载基础数据)

这是我的比较代码。我知道我一定错过了一些简单的东西......

** 我目前正在对我的单元格的数据进行硬编码,一旦我可以解决此问题,这将更改为核心数据模型......尽管这可能是我的问题的基础,因为我正在对单元格进行硬编码每个 IP **

@implementation CharitiesTableViewController
NSArray *charities;
NSArray *searchResults;


- (void)viewDidLoad 
    [super viewDidLoad];
    [self setColors];

    [_charityTable registerNib:[UINib nibWithNibName:@"CharityTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"charityCell"];

    self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 350.0;
//    self.tableView.contentInset = UIEdgeInsetsMake(-2.0f, 0.0f, 0.0f, 0.0);

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.searchController.searchBar.delegate = self;
    self.searchController.delegate = self;

    self.tableView.tableHeaderView = self.searchController.searchBar;
    self.definesPresentationContext = YES;


- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];


- (void) setColors 



#pragma mark - Search Controller

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController 
    NSString *searchString = searchController.searchBar.text;
    [self searchForText:searchString];
    [self.tableView reloadData];


- (void)searchForText:(NSString *)searchText 
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
    searchResults = [charities filteredArrayUsingPredicate:resultPredicate];


- (void)willPresentSearchController:(UISearchController *)searchController 
    self.navigationController.navigationBar.translucent = YES;


-(void)willDismissSearchController:(UISearchController *)searchController 
    self.navigationController.navigationBar.translucent = NO;



#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    if (tableView == _charityTable)
    
        return 1;
    
    return [searchResults count];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    return 1;


- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section 
    return SectionSpacer;


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section 
    return SectionSpacer;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    switch (indexPath.section) 
        case 0:
            CharityTableViewCell *cell = (CharityTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"charityCell"];

            cell.charityImage.image = [UIImage imageNamed:@"cleanup"];
            cell.charityName.text = @"Garbage cleanup - Crowchild";
            cell.charityTagLine.text = @"City of Calgary";
            cell.charityDescriptionShort.text = @"We are rounding up anyone that wants to help clean up the grass and nearby areas close to crowchild.";

            return cell;
        
        default:
            UITableViewCell *cell;
            return cell;
        
    


@end

感谢您的帮助!

【问题讨论】:

您没有在任何地方初始化charities 数组或将任何数据放入其中,因此过滤它当然不会给您任何结果。即使您确实有数据,它也不会显示,因为您将硬编码数据放入表中,而不是使用 searchResults 是的,我认为情况会如此,所以一旦我正确获取数据,您认为代码会起作用吗?设置是否正确? 【参考方案1】:

我很傻......我试图在没有像 com 导师所说的那样初始化数据的情况下做到这一点。代码是正确的,如果有人有任何类似的问题,请确保您的数据数组中确实有数据...

【讨论】:

以上是关于SearchController 不搜索自定义 UITableViewCells的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationBar变成白色,在iOS 13中使用navigationItem.searchController时不会关闭

UISearchController iOS 11 自定义

隐藏 UISearchDisplayController 的搜索栏

按对象数组过滤 searchController

searchController 在单击搜索项时消失

除非我在搜索栏中点击,否则 SearchController 不会显示未过滤的结果