iOS 用UISearchDisplayController实现查找功能

2023-11-12

  UISearchDisplayController是iOS中用于处理搜索功能的控制器,此控制器需要和UISearchBar结合使用

  示例代码如下:

  1 //
  2 //  WKRootViewController.m
  3 //  表格视图的搜索功能
  4 //
  5 //  Created by student on 14-10-20.
  6 //  Copyright (c) 2014年 wukong. All rights reserved.
  7 //
  8 
  9 #import "WKRootViewController.h"
 10 
 11 @interface WKRootViewController ()
 12 
 13 @property (strong, nonatomic) NSMutableArray* dataSource;
 14 
 15 @property (strong, nonatomic)NSMutableArray* resultArrat;
 16 
 17 
 18 @end
 19 
 20 @implementation WKRootViewController
 21 {
 22     //用于加载数据源的表视图
 23     UITableView *_tableView;
 24     
 25     UISearchBar *_searchBar;
 26     
 27     UISearchDisplayController *_searchControl;
 28 }
 29 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
 30 {
 31     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
 32     if (self) {
 33         // Custom initialization
 34     }
 35     return self;
 36 }
 37 
 38 - (void)viewDidLoad
 39 {
 40     [super viewDidLoad];
 41     
 42     [self createUI];
 43     [self createDataSource];
 44     // Do any additional setup after loading the view.
 45 }
 46 
 47 - (void)createDataSource
 48 {
 49     _dataSource = [[NSMutableArray alloc] init];
 50     _resultArrat = [[NSMutableArray alloc] init];
 51     for (int i = 'A'; i <= 'z'; i++) {
 52         NSMutableArray *section = [[NSMutableArray alloc] init];
 53         for (int j = 1; j <= 10; j++) {
 54             NSString *str = [NSString stringWithFormat:@"%c-%d", i, j];
 55             [section addObject:str];
 56         }
 57         [_dataSource addObject:section];
 58     }
 59 }
 60 
 61 #pragma mark- UITableViewDataSource
 62 
 63 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 64 {
 65     //判断当前展示的表格
 66     if (tableView != _tableView)
 67         return 1;
 68     return _dataSource.count;
 69 }
 70 
 71 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 72 {
 73     if (tableView != _tableView) {
 74         return _resultArrat.count;
 75     }
 76     return [[_dataSource objectAtIndex:section] count];
 77 }
 78 
 79 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 80 {
 81     [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
 82     
 83     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
 84     if (tableView != _tableView) {
 85         cell.textLabel.text = [_resultArrat objectAtIndex:indexPath.row];
 86     }else{
 87         cell.textLabel.text = [[_dataSource objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
 88     }
 89     return cell;
 90 }
 91 
 92 - (void)didReceiveMemoryWarning
 93 {
 94     [super didReceiveMemoryWarning];
 95     // Dispose of any resources that can be recreated.
 96 }
 97 
 98 
 99 #pragma mark - CreateUI
100 - (void)createUI
101 {
102     _tableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 30, 300, 440) style:UITableViewStylePlain];
103     _tableView.delegate = self;
104     _tableView.dataSource = self;
105     [self.view addSubview:_tableView];
106     
107     _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 300, 30)];
108     _searchBar.searchBarStyle = UISearchBarStyleMinimal;
109     _searchBar.delegate = self;
110     [_tableView setTableHeaderView:_searchBar];
111     /*
112      第一个参数:用于输入搜索内容的UISearchBar对象
113      第二个参数:提供给我的表格视图数据源的控制器对象,这个对象必须是实现了表格的两个协议
114      */
115     _searchControl = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self];
116 //    _searchControl.searchResultsTableView
117 //    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 60, 30)];
118 //    label.backgroundColor =[UIColor redColor];
119 //    [_searchControl.searchResultsTableView setTableHeaderView:label];
120     //设置_searchControl自带的表格视图的委托对象
121     [_searchControl setSearchResultsDataSource:self];
122     [_searchControl setSearchResultsDelegate:self];
123 }
124 
125 #pragma mark -UISearchBarDelegate
126 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
127 {
128     [_resultArrat removeAllObjects];
129     NSString *str = [NSString stringWithFormat:@"*%@*", searchText];
130     NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF like %@", str];
131     for (NSMutableArray *arr in _dataSource) {
132         for (NSString *str in arr) {
133             if ([pred evaluateWithObject:str]) {
134                 [_resultArrat addObject:str];
135             }
136         }
137     }
138 }
139 @end

 

转载于:https://www.cnblogs.com/pretty-guy/p/4063539.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 用UISearchDisplayController实现查找功能 的相关文章

  • 在 Android Studio 2.2 中愉快地使用 C/C++

    使用 Android studio 你可以将 C 和 C 代码编译成 native library 然后打包到你的 APK 中 你的 Java 代码可以通过 Java Native Interface JNI 调用 native libra
  • Lite Git (II) - Initialize

    Lite Git II Initialize 前言 本专栏名为Lite Git 主要想与Pro Git对应 后者为Git官方指南 有兴趣 或者想了解更多细节的同学 请移步官网下载PDF版 本专栏主要为了让初出茅庐的同学更快 更合理地掌握Gi
  • RxJS——异步数据流的响应式编程库(适合新手入门)

    文章目录 RxJS概述 Redux VS RxJS RxJS核心概念解析 热观察和冷观察 merge combine合流 RXJS6 的变化 RxJS概述 RxJS 全称 Reactive Extensions for JavaScript
  • 产线发现扣上电池就开机问题分析

    作者 AirCity 2020 3 1 Aircity007 sina com 本文所有权归作者Aircity所有 现象 某SDM630平台手机项目首件 扣上电池 没有按Power键 主板立即开机 问题分析 初步排查开机信号 VBUS信号
  • 前端面试常问题(持续整理中)

    1 js的运行机制 js主要用途是和用户互动 用来操作DOM 所以js是单线程的 避免了同时操作同一个DOM的矛盾问题 2 arguments对象是什么 它是一个类数组对象 它有length属性 但是没有数组的方法 它是如何转化成数组的呢
  • linux操作系统安装时间怎么看,Linux操作系统版本要怎么查看

    Linux操作系统版本要怎么查看 Linux可安装在各种计算机硬件设备中 比如手机 平板电脑 路由器 视频游戏控制台 台式计算机 大型机和超级计算机 下面是小编收集Linux操作系统版本 希望大家认真阅读 1 查看内核版本命令 chen m
  • HUE+LDAP+HIVE,报错:PLAIN auth failed: Error validating LDAP user

    我已经为hue集成了ldap 本次为hive集成ldap认证之后 登录hue后 在hive editor中执行sql语句报如下错误 Bad status 3 PLAIN auth failed Error validating LDAP u
  • Web服务(04)——LAMP的简介与搭建+DISCUZ论坛

    文章目录 LAMP的简介与搭建 DISCUZ论坛 前言 一 LAMP的简介 二 Apache服务 三 LAMP服务的搭建 1 编译安装apache服务 2 编译安装MYSQL服务 3 编译安装PHP服务 四 搭建DISCUZ论坛 总结 LA
  • Datax 的基本操作

    1 Datax 简介 DataX 是一个异构数据源离线同步工具 致力于实现包括关系型数据库 MySQL Oracle等 HDFS Hive ODPS HBase FTP等各种异构数据源之间稳定高效的数据同步功能 开源地址 https git
  • 【LeetCode训练营 189】轮转数组详解

    博客内容 LeetCode训练营 189 轮转数组详解 作 者 陈大大陈 个人简介 一个正在努力学技术的准前端 专注基础和实战分享 欢迎私信 欢迎大家 这里是CSDN 我总结知识和写笔记的地方 喜欢的话请三连 有问题请私信 目录 暴力法 辅
  • 一文看尽深度学习中的15种损失函数

    转自 https zhuanlan zhihu com p 377799012 在机器学习中 损失函数是代价函数的一部分 而代价函数则是目标函数的一种类型 1 Loss function 即损失函数 用于定义单个训练样本与真实值之间的误差
  • 解决PL/SQL 8 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务的问题

    今天晚上貌似遇到的ORACLE11G问题特别多 不过还好 几经尝试 都在网上找到了答案并解决了这些问题 留个备份 PL SQL Developer工具在连oracle11g的时候 碰到了这个问题 ORA 12514 TNS 监听程序当前无法
  • 【C语言数据结构】带头节点与不带头节点的单链表头插法对比

    前言 近期在学习STM32代码框架的过程中 老师使用链表来注册设备 发现使用了不带头节点的单链表 注册时使用头插法 之前在本专题整理学习过带头节点的单链表 因此本文整理对比一下两种方式的头插法区别 具体实现在次 重点在于用以理解两种思路 以
  • Apikit 自学日记:API 异常监控-创建 API 监控

    如何在apikit中 创建 API 监控呢 创建并开启监控API 一 手动创建监控API Eolink API 网络监控平台支持从 Eolink API Management API管理产品 中导入API信息 或者手动创建监控API 进入A
  • (杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(3)

    1005 Out of Control 先将序列a升序 然后离散化 比如说序列a为1000 1000 500 200 10 然后升序后为10 200 500 1000 1000 映射到从1开始的数 为1 2 3 4 4 此即为前缀最大值序列
  • Flask 学习-70.Flask-RESTX 注册接口实例

    前言 注册接口主要是密码需要加密 用到werkzeug security 模块的2个方法generate password hash check password hash 数据库操作用到Flask SQLAlchemy 相关的基础配置就不
  • 如何利用路由器连接wifi并将wifi网络分发出去

    有时候 我们的wifi网络设置了最大连接数 该数字小于我们的需求数 我们可以考虑利用路由器来进一步分发wifi网络 下面以tp link的产品为例介绍如何分发网络 1 开启路由器 让其发出广播信号 2 使用电脑无线功能连接该路由器 登录路由
  • Vue项目this.$router.push()找不到push问题

    在使用Vue cli开发项目时 我喜欢使用Es6语法 但在使用语法跳路由时却会受到报错 因为Es6的箭头函数的this指向的是最近的一个this 而不是全局的 所以会造成找不到路由方法的问题 解决方法 使用传统语法 XXX function
  • 7-4 多态练习-计算面积

    定义三个类 父类 抽象类 GeometricObject代表几何形状 子类Circle代表圆形 子类Rectangle代表矩形 具体属性和方法如下 父类 抽象类 GeometricObject 属性 private String color
  • 华硕主板BIOS设置虚拟化技(virtualization technology)

    华硕主板BIOS设置虚拟化技 virtualization technology 背景 环境介绍 win安装docker介绍 bios虚拟技术是否开启检查 虚拟技术开启 打开bios设置 虚拟技术设置 参考文献 背景 从2013开始 doc

随机推荐

  • A,NS,cname,forward,txt,aaaa记录讲解

    最近刚好处理DNS问题比较多 对DNS复习一下基础知识 在DNS域名解析中 记录存在很多种 例如主要的A记录 NS记录 CNAME记录 FORWARD记录 还有X记录等等 现在就对它们的区别与联系做总结 1 A记录 A记录又称IP指向 用户
  • 前端面试题总结带答案(持续更新)

    Vue面试题 1 什么是 vue 生命周期 Vue 实例从创建到销毁的过程 就是生命周期 也就是从开始创建 初始化数据 编译模板 挂载Dom 渲染 更新 渲染 卸载等一系列过程 我们称这是 Vue 的生命周期 它可以总共分为8个阶段 创建前
  • 音乐铃声解析提取API接口

    接口地址 https api hackeus cn api kgring 请求协议 HTTP HTTPS 请求方式 GET POST 返回格式 JSON 请求示例 https api hackeus cn api kgring api ke
  • intellij IDEA中我一运行程序,就提示我edit configuration

    因为你直接使用open来打开别人的项目 所以有问题 正确方法 重新打开intellij界面 使用import来导入别人的项目
  • [UnityShader入门精要读书笔记]06.顶点/片元着色器基本结构

    Unity Shader基本结构包含Shader Properties SubShader FallBack等语义块 结构如下 Shader MyShaderName Properties 属性 SubShader 针对显卡A的SubSha
  • GoWeb——处理XML文件

    目录 处理XML文件 1 解析XML文件 2 生成XML文件 处理XML文件 XML eXtensible Markup Language 可扩展标记语言 是一种数据表示格式 可以描述非常复杂的数据结构 常用于传输和存储数据 1 解析XML
  • x86 calling conventions

    原文地址 http en wikipedia org wiki X86 calling conventions x86 calling conventions From Wikipedia the free encyclopedia Thi
  • 无监督分类的4种方法

    1 等宽法 类似于制作频数分布图 将属性分布值分为几个等分的分布区间 2 等频法 将相同数量的记录放入每个区间 3 基于聚类的分析方法 将属性按照K means算法进行聚类 然后根据聚类的分类 将同一聚类的记录合并到同一组内 4 模拟退火法
  • mysql 修改 sql model_mysql 开发基础系列22 SQL Model(带迁移事项)

    一 概述 与其它数据库不同 mysql 可以运行不同的sql model 下 sql model 定义了mysql应用支持的sql语法 数据校验等 这样更容易在不同的环境中使用mysql sql model 常用来解决下面几类问题 1 通过
  • tensorflow2.0(一)----多层感知机(MLP)

    在TensorFlow 1 X版本中 调用tf enable eager execution 函数启动Eager Execution模式 则需要调用tf compat v1 disable eager execution 函数 张量流使用张
  • ubuntu20.04 安装 Qt5.15

    目录 安装前工作 选择安装QT的哪个版本 安装时候选择哪些组件 安装Qt5 15 在线安装 我选择的组件 源码包安装 测试 安装前工作 ubuntu20 04 3安装Qt6 22操作步骤 ubuntu安装qt6 sonicss的博客 CSD
  • php header expire,解决PHP Expires 导致CDN出现TCP_MISS

    因为这个缘故 CDN的 x Cache总是MISS TCP MISS 导致要回源 查了半个小时 终于找到原因了 问题图片 来自session c Authors Sascha Schumann Andrei Zmievski CACHE L
  • Mac电脑安装win10虚拟机,然后安装ensp教程

    我是M1版本的macbook air 找了海量资料经过不断拼凑出来了一份还算详细的教程吧 分享给用苹果电脑的网络初学者 目前这个未安装virtualbox的版本经过简单测试运行正常 如有问题欢迎兄弟们来讨论批评 一 在PD里面安装win10
  • idea import顺序_IntelliJ IDEA 自动导包设置(Auto Import)

    自动导包 Auto Import Auto Import 功能可以帮助我们自动删除无用的包 未被引用的 以及自动 Import 填充尚未导入的包 完全智能化地帮助我们在开发程序时 省略了导包的操作 大大优化了开发的效率 设置步骤 Setti
  • Java生成并导出word文档,操作word文档

    word文档作为办公的重要文件格式 有时候我们会需要我们的java程序直接将计算得到的结果生成word文档 方便取用 这里我们使用第三方包iText来实现 1 首先在Eclipse上新建一个Java工程 我取名为Java2Word 本经验只
  • Hive学习笔记(HiveQL数据查询基础)

    Hive学习笔记 HiveQL数据查询基础 HiveQL数据查询语句 SELECT语句 WHERE语句 GROUP BY语句 HAVING分组筛选 ORDER BY语句和SORT BY语句 HiveQL查询语句 JOIN语句 自连接 自然连
  • 使用matlab里的集成树进行数据分类预测

    当使用MATLAB时 您可以使用集成学习方法中的决策树来进行数据分类预测 决策树是一种基于树状结构的机器学习算法 它通过对训练数据进行分层次的决策来进行预测 MATLAB提供了一个称为ClassificationTree的集成树分类器 以下
  • 浏览器扫一扫功能

    浏览器扫一扫功能 PC端已测试成功 移动端需要https没测试 1 html5 qrcode 安装 npm i html5 qrcode
  • Linux Kernel compile

    1 内核源码下载 http ftp sjtu edu cn sites ftp kernel org pub linux kernel v5 x 2 查看编译机器参数命令 screenfetch 3 三种编译方式进行内核编译配置 make
  • iOS 用UISearchDisplayController实现查找功能

    UISearchDisplayController是iOS中用于处理搜索功能的控制器 此控制器需要和UISearchBar结合使用 示例代码如下 1 2 WKRootViewController m 3 表格视图的搜索功能 4 5 Crea