iOS 分组索引和索引分区
1.新建工程名SearchViewController,File->New->Projectr->SingleView Application->next
2.添加协议和声明变量
还需要让类遵循UISearchBarDelegate协议,除了充当表视图的委托之外还需要让它充当搜索栏的委托。
@interface ViewController :UIViewController<UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate>
{
UITableView*tableavaieGroup;
UISearchBar *search;
NSMutableDictionary *names;
NSMutableArray *keys;
BOOL isSearching;
}
3.添加plist文件,再到ViewDidLoad中初始化视图
- (void)viewDidLoad
{
//读取plist文件
NSString *path=[[NSBundlemainBundle]pathForResource:@"Property List"ofType:@"plist"];
NSDictionary *dictionary=[[NSDictionaryalloc]initWithContentsOfFile:path];
//self.names=dictionary;
self.allNames=dictionary;
//读取字典中的键存储在数组中
//NSArray *array=[[namesallKeys]sortedArrayUsingSelector:@selector(compare:)];
//self.myKey=array;
[selfresetSearch];
[tableViewGroupreloadData];
[tableViewGroupsetContentOffset:CGPointMake(0.0, 44.0) animated:NO];
[superviewDidLoad];}
4.实现委托方法
从数组中读取字典中的plist文件有几个分区
方法获取一个可重用单元,如果单元不存在则创建一个新的单元。然后从对应查询的数组中获取对象,将单元的文本设置成控制器标题并返回单元
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
staticNSString*DisclosureCellIdentifier = @"DisclosureCellIdentifier";
UITableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:DisclosureCellIdentifier];
if (cell == nil)
{//创建一个新的单元
cell=[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:DisclosureCellIdentifier];
}
//对应查询数组中获取的对象,将单元文本设置成控制器标题并返回单元
NSUInteger row=[indexPath row];
NSString *rowData=[listDataobjectAtIndex:row];
cell.textLabel.text=rowData;
cell.accessoryType=UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
5.添加搜索栏委托方法
搜索栏有许多在其委托上调用的方法,当用户单击键盘上的返回按钮或搜索键时,将调用searchBarBookmarkButtonClicked,此方法从搜索栏获取搜索短语,并调用我们的搜索方法,这个搜索方法将删除names中不匹配的名称和keys中的空分区:
-(void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar
{
NSString*searchTerm=[searchBar text];
[selfhandleSearchForTerm:searchTerm];
}
运行结果如下:
(点击搜索框进行搜索“egg”,出现第二个页面)
6)NSDictinary遵循NSMutableCopying协议,该协议返回一个NSmutableDictionary,但是这个方法创建的是浅副本。也就是说调用mutableCopy方法时,它将创建一个新的NSmutableDictionary对象,该对象拥有源字典所拥有的所有对象,他们并不是副本,而是相同的实际对象,由于字典中存有数组,如果我们从副本的数组中删除对象,这些对象也会从原字典的数组中删除,因为副本和源都指向相同的对象,在这种情况下元数组是不可改变
的所以无法删除对象,解决这个问题,需要为存有数组的字典创建一个深层可变副本,
Next-> 之后 Categroy on (NSDictionary) Categrpy(MutableDeepCopy)
此方法创建一个新的可变字典,然后在原字典中所有的键进行迭代,为它遇到的每个数组创建可变副本。
-(NSMutableDictionary *)mutableDeepCopy
{
NSMutableDictionary *returnDict=[[NSMutableDictionaryalloc] initWithCapacity:[selfcount]];
NSArray *keys=[selfallKeys];
//NSArray *keys=[self ];
// 因为在原有的mutableCopy 中, 只会对第一层对象进行mutable化.
// 比如NSDictionary嵌套NSArray的话.
// 原有的MutableCopy只会返回NSMutableDictionary, 而不会使其子元素也变为NSMutableArray.
// 而这种方法实际上类似递归的结构.
//循环读取复制每一个元素
for(id key in keys)
{
id oneValue=[selfvalueForKey:key];
id oneCopy=nil;
//如果key对应的元素可以响应mutableDeepCopy方法(还是NSDictionary),调用mutableDeepCopy方法复制
if([oneValue respondsToSelector:@selector(mutableDeepCopy)])
oneCopy=[oneValue mutableDeepCopy];
elseif([oneValue respondsToSelector:@selector(mutableCopy)])
oneCopy=[oneValue mutableCopy];
if(oneCopy==nil)
oneCopy=[oneValue copy];
[returnDict setValue:oneCopy forKey:key];
}
return returnDict;
}
7)要想在运行时搜索框后有一个Cancel按钮只需在Option中勾选Shows Cancel Button即可,如下图:
当用户单击Cancel按钮时,程序会将搜索短语设置为空,然后重置搜索,并重新加载数据一显示所有名称,此外,还要让搜索栏放弃第一响应者状态,这样键盘就不再起作用,以便于用户重新处理表视图。
iOS 分组索引和索引分区相关推荐
- phonex的使用,二级索引,预分区,调优
文章目录 一.基本指令 1)创建表 2)删除表 3)插入数据 4)查询数据 5)删除数据 6)退出命令行 二.映射 1)视图映射 创建视图 查询视图 删除视图 2)表映射 删除表 3)视图映射和表映射 ...
- Script:列出失效索引或索引分区
以下脚本可用于列出数据库中的失效的索引.索引分区.子分区: REM list of the unusable index,index partition,index subpartition in D ...
- oracle 建分区索引_Oracle分区表及分区索引-创建list分区
Oracle 分区表及分区索引 - 创建 list 分区 创建 list 分区的语法如上,需要我们指定的 : l column: 分区依赖列 ( 注意:只能是一个 ); l partition: 分区 ...
- mysql 创建分区索引吗_MySQL分区字段列有必要再单独建索引吗?
大家都知道对于分区字段必须是主键的一部分,那么建了复合主键之后,是否需要对分许字段再单独添加一个索引呢?有没有效果?本文主要给大家介绍了关于MySQL分区字段列是否有必要再单独建索引的相关资料,文中通 ...
- 【Oracle】表级别分区操作对索引(本地分区索引,全局分区索引,非分区索引)的影响
--参考自<Oracle索引技术> 先贴上结论吧: 下面对以上几种操作分别测试: 创建测试表及索引 --创建测试分区表 CREATE TABLE employees_parttest (e ...
- mysql 分区 全局索引_全局分区索引与局部分区索引
分区索引 分区索引,有是全局分区索引与局部分区索引,加上一种全局非分区索引(也就是普通索引),加起来共三种.下面我们讨论了这三种索引的组织结构以及应用场景. 1.全局非分区索引可以依赖普通的表,也可以 ...
- mysql5.5索引,MySQL--5索引选择原则
大家好我是安小生,这篇文章讲述索引的选择原则. 1.explain分析语句. explain:通常是用于sql语句性能分析. 举个栗子: explain select * from user wher ...
- MySQL索引与索引优化
MySQL的基本架构示意图 MySQL索引就是用于优化器上. 索引: MySQL官方对于索引的定义为:索引是帮助MySQL高效获取数据的数据结构.即可以理解为:索引是数据结构. 索引是对数据库表中一个 ...
- 22-08-25 MySQL高级(03)MySQL索引、索引演绎、适合加索引的情况、执行计划Explain各字段解释
"系统,那如果我没有绑定,没有简化,我原先的人生最大的可能是怎么样的",李长生好奇一问.很快系统给出了答案. "如果宿主是小说主角的话,就活个几章" " ...
- MySQL 索引与索引优化
索引与引擎 索引 重要名词 种类 哈希索引 B树索引 B+树索引 高效使用索引 避免索引失效 如何创建索引 隐式转换规则 前缀索引以及索引长度 为什么要避免使用 select * 最左前缀原则 lim ...
最新文章
- (转)如何从storyBoard中加载其中一个controller
- sybase isql 重启_学习这篇文章,搭建Sybase数据库不再是难题!
- 计算机网络-基本概念(9)【传输层】TCP拥塞控制 【网络层】拥塞避免
- XML电子口岸自动报关项目 真实百万级项目下载
- A - Junk-Mail Filter HDU - 2473
- MFC 获取其他窗口的Edit文本和单击Button
- windows 设置ssh登录
- 调查称谷歌占北美25%互联网流量
- SQL 不常用的一些命令sp_OACreate,xp_cmdshell,sp_makewebtask
- 【引用】关于close-on-exec标志
- 软件项目管理第4版课后习题[附解析]第九章
- 动力学建模~拉格朗日建模
- 印象笔记使用方法————印象笔记下载安装以及浏览器插件下载安装
- 新加坡政府将与加美两国就网络安全问题展开合作
- pythonqq机器人酷q_基于NoneBot的QQ聊天机器人一
- 【DVB】【Cert】DVD相关认证简介
- ThinkPHP3.2短信验证码 (创蓝253短信验证码)
- 设计模式-优惠券-策略模式
- 大数据学长面试之瓜子二手车面试题
- python图片截取特定部分_如何在Python中使用OpenCV提取图像的特定部分?
热门文章
- vb用数组方式快速导出MSFlexGrid表格数据到Excel表格中
- 如何自制会跳舞的AI小姐姐?这有一份易上手的开源攻略
- 首个教育部印发的人工智能行动计划出炉:规划三步走,大学有三任务
- Goodfellow“死磕”NIPS:这名字涉及色情和仇日
- 8Linux磁盘划分、RAID
- 数学建模笔记2方法分类
- 较为周全的Asp.net提交验证方案(Session版)
- 让世界没有陌生的角落共享单车时代的快与慢
- 性能调优之综合篇 - Linux系统性能监控和故障排查利器Sysdig
- 【Android】实验3 颜色、字符串资源的使用【提交截止时间:2016.4.1】