原文链接http://www.mobile-open.com/2015/86290.html,有删节和改动。

原文主要讲述了如何使用UISearchController实现搜索栏,现在把实现思路和代码整理出来分享给iOS程序猿,希望给大家的开发工作带来帮助。再次感谢原作者。

UISearchController 继承自UIViewController     // 在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISearchDisplayController的组合方式.

#import SearchViewController.h
#define kTableCell @tablecell
@interface SearchViewController ()
@property(nonatomic,retain)NSMutableArray *items;
@property(nonatomic,retain)UISearchController *searchController;
@property(nonatomic,retain)NSMutableArray *searchResults;//接收数据源结果
@end

懒加载及释放

- (instancetype)init
{self = [super init];if (self) {}return self;
}
//懒加载
- (NSMutableArray *)items{if (!_items) {self.items = [NSMutableArray arrayWithCapacity:0];}return [[_items retain]autorelease];
}
//懒加载
- (NSMutableArray *)searchResults{if (!_searchResults) {self.searchResults = [NSMutableArray arrayWithCapacity:0];}return [[_searchResults retain]autorelease];
}
//释放
- (void)dealloc
{self.items = nil;self.searchResults = nil;self.searchController = nil;[super dealloc];
}

调用:

- (void)viewDidLoad {[super viewDidLoad];//导航栏[self p_navigationController];//调用初始化searchController[self setSearchControllerView];//注册[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kTableCell];}

初始化SearchController初始化

- (void)setSearchControllerView{self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];self.searchController.searchBar.frame = CGRectMake(0, 0, 0, 44);self.searchController.dimsBackgroundDuringPresentation = false;//搜索栏表头视图self.tableView.tableHeaderView = self.searchController.searchBar;[self.searchController.searchBar sizeToFit];
//背景颜色self.searchController.searchBar.backgroundColor = [UIColor orangeColor];self.searchController.searchResultsUpdater = self;}

引入UISearchController之后, UITableView的内容也要做相应地变动: 即cell中要呈现的内容是items, 还是searchResults.这一点, 可以通过UISearchController的active属性来判断, 即判断输入框是否处于active状态.

UITableView相关的很多方法都要根据active来做判断:

配置导航条

- (void)p_navigationController{self.title = @小韩哥-英雄列表;self.items = @[@国服第一臭豆腐 No.1 Stinky Tofu CN.,@比尔吉沃特(Bill Ji walter),@瓦洛兰 Valoran,@祖安 Zaun,@德玛西亚 Demacia,@诺克萨斯 Noxus,@艾欧尼亚 Ionia,@皮尔特沃夫 Piltover,@弗雷尔卓德 Freijord,@班德尔城 Bandle City,@无畏先锋,@战争学院 The Institute of War,@巨神峰,@雷瑟守备(JustThunder),@裁决之地(JustRule),@黑色玫瑰(Black Rose),@暗影岛(Shadow island),@钢铁烈阳(Steel fierce),@恕瑞玛沙漠 Shurima Desert,@均衡教派(Balanced sect),@水晶之痕(Crystal Scar),@影流(Shadow Flow ),@守望之海(The Watchtower of sea),@皮尔特沃夫,@征服之海,@扭曲丛林 Twisted Treeline,@教育网专区,@试炼之地 Proving Grounds,@卡拉曼达 Kalamanda,@蓝焰岛 Blue Flame Island,@哀嚎沼泽 Howling Marsh,@艾卡西亚 Icathia,@铁脊山脉 Ironspike Mountains,@库莽古丛林 Kumungu,@洛克法 Lokfar,@摩根小道 Morgon Pass,@塔尔贡山脉 Mountain Targon,@瘟疫丛林 Plague Jungles,@盘蛇河 Serpentine River,@厄尔提斯坦 Urtistan,@巫毒之地 Voodoo Lands,@咆哮深渊 Howling Abyss,@熔岩洞窟 Magma Chambers,@召唤师峡谷 Summoner's Rift,@九尾妖狐: 阿狸(Ahri),@暗影之拳:阿卡丽(Akali),@牛头酋长:阿利斯塔(Alistar),@殇之木乃伊:阿木木(Amumu),@冰晶凤凰:艾尼维亚(Anivia),@黑暗之女:安妮(Annie),@寒冰射手:艾希(Ashe),@蒸汽机器人:布里茨(Blitzcrank),@复仇焰魂:布兰德(Brand),@皮城女警:凯特琳(Caitlyn),@魔蛇之拥:卡西奥佩娅(Cassiopeia),@虚空恐惧:科’加斯(ChoGath),@英勇投弹手:库奇(Corki),@诺克萨斯之手:德莱厄斯(Darius),@皎月女神:黛安娜:(Diana),@祖安狂人:蒙多医生(DrMundo),@荣耀行刑官:德莱文(Delevin),@蜘蛛女皇:伊莉斯(Elise),@寡妇制造者:伊芙琳(Evelynn),@探险家:伊泽瑞尔(Ezreal),@末日使者:费德提克(Fiddlesticks),@无双剑姬:剑姬(Fiora),@潮汐海灵:菲兹(Fizz),@哨兵之殇:加里奥(Galio),@海洋之灾:普朗克(Gangplank),@德玛西亚之力:盖伦(Garen),@酒桶:古拉加斯(Gragas),@法外狂徒:格雷福斯(Graves),@战争之影:赫卡里姆 (Hecarim),@大发明家:黑默丁格(Heimerdinger),@刀锋意志:伊瑞利亚(Irelia),@风暴之怒:迦娜(Janna),@德玛西亚皇子:嘉文四世(JarvanⅣ),@武器大师:贾克斯(Jax),@未来守护者:杰斯(Jayce),@天启者:卡尔玛(Karma),@死亡颂唱者:卡尔萨斯(Karthus),@虚空行者:卡萨丁(Kassadin),@不详之刃:卡特琳娜(Katarina),@审判天使:凯尔(Kayle),@狂暴之心:凯南(Kennen),@虚空掠夺者:卡’兹克(Khazix),@深渊巨口:克格’莫(Kog Maw),@诡术妖姬:乐芙兰(LeBlanc),@盲僧:李青(Lee sin),@曙光女神:蕾欧娜(Leona),@仙灵女巫:璐璐(lulu),@光辉女郎:拉克丝(Lux),@熔岩巨兽:墨菲特(Malphite),@虚空先知:玛尔扎哈(Malzahar),@扭曲树精:茂凯(Maokai),@无极剑圣:易(Yi),@赏金猎人:厄运小姐(MissFortune),@齐天大圣:孙悟空(Monkey king),@金属大师:莫德凯撒(Mordekaiser),@堕天使:莫甘娜(Morgana),@唤潮鲛姬:娜美(Nami),@沙漠死神:内瑟斯(Nasus),@深海泰坦:诺提勒斯(Nautilus),@狂野女猎手:奈德丽(Nidalee),@永恒梦魇:魔腾(Nocturne),@雪人骑士:努努(Nunu),@狂战士:奥拉夫(Olaf),@发条魔灵:奥莉安娜(Orianna),@战争之王:潘森(Pantheon),@钢铁大使:波比(Poopy),@披甲龙龟:拉莫斯(Rammus),@荒漠屠夫:雷克顿(Renekton),@傲之追猎者:雷恩加尔(Rengar),@放逐之刃:瑞文(Rivan),@机械公敌:兰博(Rumble),@流浪法师:瑞兹(Ryze),@凛冬之怒:瑟庄妮:(Sejuani),@恶魔小丑:萨科(Shaco),@暮光之眼:慎(Shen),@龙血武姬:希瓦娜(Shyvana),@炼金术士:辛吉德(Singed),@亡灵勇士:赛恩(Sion),@战争女神:希维尔(Sivir),@水晶先锋:斯卡纳(Skarner),@琴瑟仙女:娑娜(Sona),@众星之子:索拉卡(Soraka),@策士统领:斯维因(Swain),@暗黑元首:辛德拉(Syndra),@刀锋之影:泰隆(Talon),@宝石骑士:塔里克(Taric),@迅捷斥候:提莫(Teemo),@魂锁典狱长:锤石(Thresh),@麦林炮手:崔丝塔娜(Tristana),@诅咒巨魔:特兰德尔(Trundle),@蛮族之王:泰达米尔(Tryndamere),@卡牌大师:崔斯特(Twisted Fate),@瘟疫之源:图奇(Twitch),@野兽之灵:乌迪尔(Udyr),@首领之傲:厄加特(Urgot),@惩戒之箭:韦鲁斯(Varus),@暗夜猎手:薇恩(Vayne),@邪恶小法师:维伽(Veigar),@皮城执法官:蔚(Vi),@机械先驱:维克托(Viktor),@猩红收割者:弗拉基米尔(Vladimir),@雷霆咆哮:沃利贝尔(Volibear),@嗜血猎手:沃里克(Warwick),@远古巫灵:泽拉斯(Xerath),@德邦总管:赵信(XinZhao),@掘墓者:约里克(Yorick),@影流之主:劫(Zed),@爆破鬼才:吉格斯(Ziggs),@时光守护者:基兰(Zilean),@荆棘之兴:婕拉(Zyra)].mutableCopy;
}

#pragma mark 协议中的方法

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{[self.searchResults removeAllObjects];//NSPredicate 谓词NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@self contains[cd] %@,searchController.searchBar.text];self.searchResults = [[self.items filteredArrayUsingPredicate:searchPredicate]mutableCopy];//刷新表格[self.tableView reloadData];}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {// Return the number of sections.return 1;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return (!self.searchController.active) ? self.items.count : self.searchResults.count;
}

返回cell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kTableCell forIndexPath:indexPath];if (cell == nil) {cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kTableCell];}if (indexPath.row > 0) {cell.imageView.frame = CGRectMake(60, 60, 10, 10);cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@%ld,indexPath.row + 43]];cell.textLabel.font = [UIFont systemFontOfSize:15];}cell.textLabel.text = (!self.searchController.active) ? self.items[indexPath.row] : self.searchResults[indexPath.row];return cell;
}

业务代理返回高:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{if (indexPath.row == 0) {return 100  ;}else{return 80;}
}

最终效果:

iOS开发——UISearchController实现搜索栏功能|阳和移动开发相关推荐

  1. 微信小程序开发类似微博回复功能自带云开发数据库(无限回复)

    注意事项:本文放置了关键代码和全部该页的全部代码,按需自取.html中存在少许图片,大家加上自己喜欢的即可.数据库结构内容也会展示给大家. 效果: 第一条回复的是帖子,第二条回复的是第三条,第三条回复 ...

  2. IOS开发(17)IOS 使用LBXScan框架开发扫一扫功能

    说起IOS开发,我是个新手,最近公司接到的项目,C.C++都快忘光的我做IOS开发表示又很大的压力.无奈,还是的搞.找了找资料,看了几天就走在了IOS APP开发的道路上. 在做扫一扫功能,由于自己没 ...

  3. iOS中 UISearchController 搜索栏 UI技术分享

    iOS中 UISearchController 搜索栏 UI技术分享 [objc] view plain copy <p style="margin-top: 0px; margin- ...

  4. ios开发 热搜词demo_手机app如何开发

    泛娱科技​www.cpdzapp.com 手机app开发流程为: 1.首先,制作一款APP,必须要有相关的idea,也就是说,第一步是APP的idea形成. 2.通过那些idea来进行APP的主要功能 ...

  5. 那些年微信开发过的鸡肋功能,及其带给我们的思考

    本文由作者"卫夕"(ID:weixizhibei)原创,作者为资深广告产品经理,致力于剖析互联网广告的基本逻辑.思路及技巧. 1.引言 坐拥7亿日活的微信极其成功,有人说微信的成功 ...

  6. 全功能音视频互动开发平台

    全功能音视频互动开发平台 云智真音视频解决方案,即云智真音视频互动开发平台(云智真音视频SDK开发包)通过封装音视频编解码.流媒体处理以及P2P等专业复杂技术,为上层应用提供简单的API控制接口,实现 ...

  7. 一人一本一年N手机,仿滴滴出行开发含700个功能网约车APP源码(二)

    继上一篇仿照滴滴出行开发的网约车顺风车代驾APP软件源码功能开发文章,继续聊一下司机端具有哪些功能. 在开发司机端的APP过程中,从只有一个早期的高德地图安卓版本,发展到大改框架.新增高德地图安卓版司 ...

  8. java web 分享功能实现_微信开发(一)基于Wx-java的微信分享功能

    最近在做微信服务号开发,简单总结一下,便于自己学习积累和分享给大家: 环境介绍: Spring+ Spring MVC +Mybatis 开发语言: JAVA 微信公众平台的开发中,微信只公布了一个基 ...

  9. android微信支付都需要什么意思,Android开发微信APP支付功能的要点小结

    基本概念 包名值得是你APP的包,在创建工程时候设置的,需要在微信支付平台上面设置. 签名指的是你生成APK时候所用的签名文件的md5,去掉:全部小写,需要在微信支付平台上面设置. 调试阶段,签名文件 ...

最新文章

  1. 阿里云Kubernetes实战2–搭建基础服务
  2. java 协程框架_GitHub - yaozhang0105/dactor: Dactor是基于Java的轻量级同步异步统一处理框架,基于协程思想构建...
  3. 有重复元素的排列问题pascal题解
  4. 虎牙直播在AI实时剪辑技术上的创新实践
  5. Lolipa魔方财务主题-虚拟主机源码
  6. 开发人员指南 Googlemap API教程
  7. opencv掩膜操作
  8. html表白代码大全_100条代码,拿去“表白”
  9. MATLAB实现高斯-克吕格投影反算
  10. AutoCAD 命令定义
  11. 错误记录(Unindent amount does not match previous indent)
  12. es---elasticsearch-篇二:idea操作es,常用查询DSL
  13. Rabbit基础概念
  14. Swing交通罚单管理系统java车辆违章缴费金额查询交警信息jsp源代码Maven数据库mysql
  15. PO模型(设计模式)
  16. 阿里云物联网平台体验(树莓派+Python篇) 1
  17. permgen spac_SPAC是AV初创企业的未来
  18. 仓央嘉措 ❤《见与不见》的全文 ❤
  19. Android4.0中添加新语言实现方案(以缅甸语为例)
  20. linux 文件夹tar.bz2压缩命令,使用tar命令提取(或解压缩)tar.bz2和tbz2文件的方法...

热门文章

  1. 澳研究发现唱歌跑调者或存在沟通障碍
  2. 您的计算机无法访问dota2服务器,win10系统运行dota2提示“无法与任何服务器建立连接”如何解决...
  3. 中国“智”造——新车评网试驾观致3
  4. word文档转换为PDF
  5. 计算机绘画社团活动总结,关于绘画社团的活动总结三篇
  6. php 猴子选大王,PHP猴子选大王,最优解决算法:一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数... - 简书...
  7. 论文笔记--Deep contextualized word representations
  8. 生活:与小周一起参加广运会
  9. linux 硬盘格式化,挂载,反挂载等操作
  10. 自攻螺丝与塑件底孔规格表