<p style="margin-top: 0px; margin-bottom: 0px; font-size: 20px; font-family: 'STHeiti Light';"><span style="color:#ff0000;">UISearchController 继承自UIViewController</span></p><p style="margin-top: 0px; margin-bottom: 0px; font-size: 20px; font-family: 'STHeiti Light';"><span style="color:#ff0000;">    // 在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISearchDisplayController的组合方式.</span></p>
#import "SearchViewController.h"
#define kTableCell @"tablecell"
@interface SearchViewController ()<UISearchResultsUpdating>
@property(nonatomic,retain)NSMutableArray *items;
@property(nonatomic,retain)UISearchController *searchController;
@property(nonatomic,retain)NSMutableArray *searchResults;//接收数据源结果
@end

懒加载及释放

@implementation SearchViewController

- (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 搜索栏 UI技术分享的更多相关文章

  1. iOS中 UITextView文本视图 技术分享

    UITextView: 文本视图相比与UITextField直观的区别就是UITextView可以输入多行文字并且可以滚动显示浏览全文. UITextField的用处多,UITextView的用法也不 ...

  2. iOS中 WGAFN_网络监控 技术分享

    需要用到第三方AFNetworking/SVProgressHUD 没有的可以关注我微博私信我.http://weibo.com/hanjunqiang AppDelegate.m #import & ...

  3. iOS中 UITableViewRowAction tableViewcell编辑状态下的功能 UI技术分享

    * tableView:editActionsForRowAtIndexPath: // 设置滑动删除时显示多个按钮 * UITableViewRowAction // 通过此类创建按钮 * 1. 我 ...

  4. iOS中大流中的自定义cell 技术分享

    AppDelegate.m指定根视图 self.window.rootViewController = [[UINavigationController alloc] initWithRootView ...

  5. 【转】如何在IOS中使用3D UI - CALayer的透视投影

    原文网址:http://www.tairan.com/archives/2041/ 例子代码可以在 http://www.tairan.com/thread-3607-1-1.html 下载 iOS的 ...

  6. 高大上的微信小程序中渲染html内容—技术分享

    大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...

  7. iOS中 数据持久化 UI高级_17

    数据持久化的本质就是把数据由内写到本地(硬盘中),在iOS指将数据写到沙盒文件夹下: 沙盒机制:指的就是采用沙盒文件夹的形式管理应用程序的本地文件,而且沙盒文件夹的名字是随机分配的,采用十六进制方法命 ...

  8. iOS中实现多线程的技术方案

    pthread 实现多线程操作 代码实现: void * run(void *param) {    for (NSInteger i = 0; i < 1000; i++) {         ...

  9. iOS UISearchBar UISearchController

    搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社 交,O2O还是在线教育等都会有一个搜索栏的实现,不过彼此实现效果是 ...

随机推荐

  1. 单选、多选框根据value值设置选中

    $("input:checkbox[value='video']").parent().addClass('checked'); $("input:radio[value ...

  2. Python笔记(一)——打印输出

    一.输出语句input    输出语句print 例:用户输入 username = input("username:") #变量名 显示的字符 password = input( ...

  3. JAVA 第二天 关键字

    一.标识符及字符集 Java语言规定标识符是以字母.下划线"_"或美元符号"$"开始,随后可跟数字.字母.下划线或美元符号的字符序列.Java标识符大小写敏感, ...

  4. java连接sqlserver2008

    java连接sqlserver2008时应有sqljdbc4.jar驱动包.连接的示例代码如下: import java.sql.*; public class ConnectSQL { public ...

  5. javascript 中如何判断是否是JSON格式的字符串

    var stringToJson = function(value){ try{ eval('('+value+')'); return angular.fromJson(value); } catc ...

  6. 检测linux vps是xen openvz还是kvm的方法

    很多时候不知道自己买的vps是那种虚拟化技术,怕给商家忽悠了,下面给大家介绍下怎么简单的判断自己vps的虚拟化技术. 1.通过系统上的相关目录或文件判断 ll /proc/   ps: /proc目录 ...

  7. Eleven

    A. Eleven time limit per test : 1 second memory limit per test:  256 megabytes input:  standard inpu ...

  8. ACM Adding Reversed Numbers(summer2017)

    The Antique Comedians of Malidinesia prefer comedies to tragedies. Unfortunately, most of the ancien ...

  9. day08 JSP

    day08 JSP 1. jsp 入门和 jsp 运行原理 2. jsp 语法 2.1 jsp 模板元素:jsp 页面中的 html 内容.它定义了网络基本骨架,即定义了页面结构和外观. 2.2 js ...

  10. xlwt以格式生成xls文件

    参考: http://blog.sina.com.cn/s/blog_5357c0af01019gjo.html http://www.programcreek.com/python/example/ ...