`

Search

 
阅读更多

UISearchBar  &  UISearchBarDelegate
Demo中的代码 - - ,了解下思路


http://blog.sina.com.cn/s/blog_67c938a20100v9gq.html
http://blog.csdn.net/cocoa_geforce/article/details/6801460

#pragma mark Search Bar Delegate Methods
//  开始
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    isSearching = YES;
    [table reloadData];
}

//  点击搜索
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar 
{
    NSString *searchTerm = [searchBar text];
    [self handleSearchForTerm:searchTerm];
}

//  即时搜索
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchTerm
{
    if ([searchTerm length] == 0)
    {
        [self resetSearch];
        [table reloadData];
        return;
    }
    
    [self handleSearchForTerm:searchTerm];
    
}

//  取消搜索
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    isSearching = NO;
    search.text = @"";
    [self resetSearch];
    [table reloadData];
    [searchBar resignFirstResponder];
}




//  提供实时搜索
- (void)handleSearchForTerm:(NSString *)searchTerm
{
    [self resetSearch];
    
    //  总体思路是将不符合条件的加到集合A,然后集中移除集合A
    //  迭代时移除,可能会出错,用过C++的Array就知道
    NSMutableArray *sectionsToRemove = [[NSMutableArray alloc] init];
    for (NSString *key in self.keys) 
    {
        NSMutableArray *array = [names valueForKey:key];
        NSMutableArray *toRemove = [[NSMutableArray alloc] init];
        for (NSString *name in array) 
        {
            if ([name rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location == NSNotFound)
                [toRemove addObject:name];
        }
        
        if ([array count] == [toRemove count]) {
            [sectionsToRemove addObject:key];
        }
        
        [array removeObjectsInArray:toRemove];
        [toRemove release];
    }
    
    [self.keys removeObjectsInArray:sectionsToRemove];
    [sectionsToRemove release];
    [table reloadData];
}




//  刷新Keys索引  和  可变副本
- (void)resetSearch {
    
    NSMutableDictionary *allNamesCopy = [self.allNames mutableDeepCopy];
    self.names = allNamesCopy;
    [allNamesCopy release];
	
    NSMutableArray *keyArray = [[NSMutableArray alloc] init];
    [keyArray addObject:UITableViewIndexSearch];//UITableViewIndexSearch=@"{search}" 放大镜,细节啊
    [keyArray addObjectsFromArray:[[self.allNames allKeys] 
        sortedArrayUsingSelector:@selector(compare:)]];// 还进行了排序
    self.keys = keyArray;
    [keyArray release];
}



// NSDictionary 深拷贝
@implementation NSDictionary(DeepMutableCopy)

-(NSMutableDictionary *)mutableDeepCopy
{
	NSMutableDictionary *ret = [[NSMutableDictionary alloc] initWithCapacity:[self count]];
	NSArray *keys = [self allKeys];

	for (id key in keys)
	{
			id oneValue = [self valueForKey:key];
			id oneCopy = nil;
			
			if ([oneValue respondsToSelector:@selector(mutableDeepCopy)])
					oneCopy = [oneValue mutableDeepCopy];
		
			else if ([oneValue respondsToSelector:@selector(mutableCopy)])
					oneCopy = [oneValue mutableCopy];
		
			if (oneCopy == nil)
					oneCopy = [oneValue copy];
		
			[ret setValue:oneCopy forKey:key];
	}
	return ret;
}
@end



#pragma mark Table View Delegate Methods
- (NSIndexPath *)tableView:(UITableView *)tableView 
  willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [search resignFirstResponder];//取消键盘
    search.text = @"";
    isSearching = NO;
    [tableView reloadData];
    return indexPath;
}

- (NSInteger)tableView:(UITableView *)tableView 
sectionForSectionIndexTitle:(NSString *)title 
               atIndex:(NSInteger)index
{
    NSString *key = [keys objectAtIndex:index];
    if (key == UITableViewIndexSearch)
    {
        [tableView setContentOffset:CGPointZero animated:NO];//搜索栏
        return NSNotFound;
    }
    else return index;
    
}
分享到:
评论

相关推荐

    elasticsearch集群安全加密插件之search-guard

    **Elasticsearch 集群安全加密插件 Search Guard** Search Guard是一款强大的安全解决方案,专为Elasticsearch设计,提供全面的数据保护、访问控制和安全监控功能。它可以帮助企业满足合规性要求,确保数据在传输和...

    Elasticsearch 开发手册

    Elasticsearch 开发手册 Elasticsearch 是一个开源的、高扩展的、分布式的、提供多用户能力的全文搜索引擎,也是一个基于 Lucene 搜索的服务器,可以近乎实时地存储和搜索数据。Elasticsearch 能很方便地用于对大量...

    elasticsearch 8.11.3 windows安装包

    Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,...

    elasticsearch windows 7.10.0 解压安装包

    Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,...

    7.17.1系列Elasticsearch的elasticsearch-analysis-ik分词器

    适用于7.17.1系列,例如Elasticsearch的7.17.12版本。 elasticsearch-analysis-ik 是一个常用的中文分词器,在 Elasticsearch 中广泛应用于中文文本的分析和搜索。下面是 elasticsearch-analysis-ik 分词器的几个...

    Windows版本(8.11)ElasticSearch、elasticsearch-head、kibana、IK分词

    **Elasticsearch 8.11 for Windows** Elasticsearch 是一个开源的分布式搜索引擎,以其高可伸缩性、实时性、灵活性以及强大的数据分析能力而闻名。在Windows平台上部署Elasticsearch,用户可以利用其强大的搜索和...

    elasticsearch-8.5.0.jar

    Elasticsearch 各个版本 jar 包下载 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产...

    elasticSearch-8.14.1-windows

    Elasticsearch 8.14.1 是一个高度可扩展的开源全文检索和分析引擎,专为分布式环境设计。它允许开发者和系统管理员快速、高效地存储、搜索和分析大量数据。Elasticsearch 广泛应用于日志分析、信息检索、网站搜索、...

    ElasticSearch7.2.1+SearchGuard+Kibana+KerBeros集群测试环境部署文档.pdf

    《Elasticsearch 7.2.1 + SearchGuard + Kerberos + Kibana 集群测试环境部署详解》 本文档将详细阐述如何在Elasticsearch 7.2.1版本的基础上,集成SearchGuard安全插件、Kerberos认证服务以及Kibana可视化界面,...

    elasticsearch-hadoop-8.8.0

    Elasticsearch-Hadoop是Elasticsearch与Hadoop生态系统集成的重要组件,主要目的是让Hadoop能够无缝地访问和处理存储在Elasticsearch中的大数据。标题"elasticsearch-hadoop-8.8.0"指的是该组件的一个特定版本,即...

    elasticsearch windows 7.17.16 解压安装包

    Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,...

    search-match安装包

    "search-match"是一款用于文本搜索和匹配的工具,它在IT行业中主要用于帮助用户快速、准确地定位和查找特定的信息。这个安装包包含了实现这一功能的所有必要组件和资源。以下是关于"search-match"及其可能涉及的一些...

    最新版本springboot集成elasticsearch

    一般来说我们开发Elasticsearch会选择使用集成springboot,在网上找的springboot集成elasticsearch文章几乎都是extends ElasticsearchRepository的方式来实现。但是新版本ElasticsearchRepository里的方法基本上已经...

    elasticsearch未授权访问 漏洞修复

    Elasticsearch 是一个流行的开源全文搜索引擎,常用于大数据分析和实时数据检索。然而,如果没有正确配置安全设置,它可能会暴露于未授权访问的风险中,这可能导致数据泄露或恶意操作。本文将详细讲解如何修复 ...

    elasticsearch-7.17.3

    Elasticsearch 7.17.3 是一个高度可扩展的开源全文搜索引擎,以其强大的分布式、实时搜索和分析能力而闻名。它基于Lucene构建,但提供了更高级别的API和服务,使得管理和操作大规模数据变得更加简单。这个版本的...

    elasticsearch-jieba-plugin 8.8.2.zip

    《Elasticsearch-Jieba-Plugin 8.8.2:为Elasticsearch引入中文分词的强大力量》 Elasticsearch(ES)是一款强大的全文搜索引擎,广泛应用于大数据分析、日志检索、内容推荐等领域。然而,对于中文处理,Elastic...

    elasticsearch-6.8.18.rar(elasticsearch-6.8.18.zip)

    Elasticsearch是一个强大的开源搜索引擎,基于Apache Lucene构建,它为开发者和数据分析师提供了高效、可扩展、实时的搜索和分析功能。6.8.18版本是Elasticsearch的一个稳定版本,它在前几个版本的基础上进行了优化...

    elasticsearch-8.2.3 windows 版本

    elasticsearch-8.2.3 windows 版本。 Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的...

    elasticsearch6.6.0 aarch64 arm

    Elasticsearch 6.6.0 AArch64 ARM 是专为华为ARM架构服务器优化的搜索引擎和数据分析平台。这个版本是基于官方的x86发行版进行重新编译的,以适应ARM处理器的指令集,确保在华为的ARM服务器上能够高效、稳定地运行。...

Global site tag (gtag.js) - Google Analytics