IOS UI学习 UISearchController

使用UISearchController 配合UITableView实现搜索功能

  1 #import "ViewController12.h"
  2
  3 @interface ViewController12 () <UITableViewDataSource , UITableViewDelegate , UISearchResultsUpdating>
  4
  5 @end
  6
  7 @implementation ViewController12
  8 {
  9     UISearchController * _searchC;//SearchController
 10     UITableView *_tableV; //tableView
 11     NSMutableArray * _selectArr;//存放搜索结果数组
 12     NSMutableArray *_dataArr;//存放所有数据的数组
 13 }
 14 - (void)viewDidLoad
 15 {
 16     [super viewDidLoad];
 17     self.view.backgroundColor = [UIColor whiteColor];
 18     //是否根据按所在界面的navigationbar与tabbar的高度,自动调整scrollview的 inset,设置为no,让它不要自动调整就
 19     self.automaticallyAdjustsScrollViewInsets = NO;
 20     [self createData];
 21     [self createTableView];
 22     _selectArr = [[NSMutableArray alloc] init];
 23 }
 24
 25
 26 #pragma mark 创建数据
 27 -(void)createData
 28 {
 29     if (!_dataArr)
 30     {
 31         _dataArr = [[NSMutableArray alloc] init];
 32     }
 33
 34     for (NSInteger i = 0; i<100; i++)
 35     {
 36         [_dataArr addObject:[NSString stringWithFormat:@"%ld",i]];
 37     }
 38     NSLog(@"%@",_dataArr);
 39 }
 40
 41 #pragma mark 创建 TableView  UISearchController
 42 -(void)createTableView
 43 {
 44     _tableV = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-64-54)];
 45
 46     _tableV.delegate = self;
 47     _tableV.dataSource = self;
 48     _searchC = [[UISearchController alloc] initWithSearchResultsController:nil];
 49
 50
 51     _searchC.hidesNavigationBarDuringPresentation = NO;
 52     _searchC.dimsBackgroundDuringPresentation = YES;
 53     //设置代理
 54     _searchC.searchResultsUpdater = self;
 55     //调整SearchBar尺寸为自适应
 56     [_searchC.searchBar sizeToFit];
 57     //把SearchBar 给 TableView的标头
 58     _tableV.tableHeaderView = _searchC.searchBar;
 59     [self.view addSubview:_tableV];
 60
 61 }
 62
 63
 64
 65
 66 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 67 {
 68     return 1;
 69 }
 70 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 71 {
 72     //通过active属性判断是否搜索
 73     if (_searchC.active)
 74     {
 75         return _selectArr.count;
 76     }
 77     else
 78         return _dataArr.count;
 79 }
 80
 81 //设置单元格 cell
 82 -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 83 {
 84     static NSString * str = @"cell";
 85     UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:str];
 86     if (!cell)
 87     {
 88         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:str];
 89     }
 90
 91     if (_searchC.active)
 92     {
 93         cell.textLabel.text = _selectArr[indexPath.row];
 94     }
 95     else
 96     {
 97         cell.textLabel.text = _dataArr[indexPath.row];
 98     }
 99     return cell;
100 }
101
102
103
104
105
106 //执行搜索
107 -(void)updateSearchResultsForSearchController:(UISearchController *)searchController
108 {
109     NSString *searchString = [_searchC.searchBar text];
110     NSPredicate *preicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchString];
111     if (_selectArr!= nil) {
112         [_selectArr removeAllObjects];
113     }
114     //过滤数据
115     _selectArr= [NSMutableArray arrayWithArray:[_dataArr filteredArrayUsingPredicate:preicate]];
116     //刷新表格
117     [_tableV reloadData];
118 }
119
120
121
122 - (void)didReceiveMemoryWarning {
123     [super didReceiveMemoryWarning];
124     // Dispose of any resources that can be recreated.
125 }
126
127 @end
时间: 2024-12-21 06:26:50

IOS UI学习 UISearchController的相关文章

IOS UI学习 UITableView ----- UITableViewDataSource

UITableView派生自UIScrollView UITableView结构如下: 背景是滚动视图,每个横向的表格称为cell ( UITableViewCell ) 每一个 cell 既可以存储数据,也可以接受选中的事件, 我们选中某个cell时,可以下拉列表,可以推出新的页面 在编辑模式选中多个cell,可以批量删除等. 成员变量 1 { 2 UITableView * _tableV; 3 NSMutableArray * _dataArr; 4 UISearchController

IOS UI学习 UITableView Demo 实现类似QQ联系人收起和展开效果

UItableView 日常学习总结 实现类似 QQ联系人收起和展开的效果 思路 就是 自定义Header 在它上面添加一个Button 或者一个点击手势 ,我是添加了一个手势 每一个分区设置一个状态为表示为收起和展开  (bool 型 即可) 当判断为收起时将分区 section的row数量设置为0,即不显示任何内容 当判断为展开时将分区 section的row数量设置为要显示的内容的数目 然后重载分区即可 重载分区方法 1 //重载分区 2 [_tableV reloadSections:[

IOS UI学习 UI 十个小控件 初度学习

1.  UISwitch 开关 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 self.view.backgroundColor = [UIColor whiteColor]; 5 self.title = @"开关"; 6 //开关创建 7 UISwitch * sw = [[UISwitch alloc]initWithFrame:CGRectMake(10, 100, 100, 100)]; 8 //设置开关的位置 9 sw

IOS UI学习 UISearchBar

UISearchBar继承自UIView.UIResponder.NSObject UISearchBar属性设置 code: 1 -(void)createSearchBar 2 { 3 _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 40)]; 4 //设置控件样式 5 _searchBar.barStyle = UISearch

iOS UI学习-笔记

第一: 1.IBAction: 1> 能保证方法可以连线 2> 相当于void 2.IBOutlet: 1> 能保证属性可以连线 3.常见错误 setValue:forUndefinedKey:]: this class is not key value coding 错误原因是:连线出问题了 4.Xcode5开始的一些建议 把用于连线的一些方法和属性声明在.m文件的类扩展中 5.frame\center\bounds 1> frame:能修改位置和尺寸 2> center:

IOS开发-UI学习-sqlite数据库的操作

IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还快,在ios和安卓app中常用来完成对数据进行离线缓存的处理,如新闻数据的离线缓存. 它的基本操作步骤是: 1.先加入sqlite开发库libsqlite3.dylib, 2.新建或打开数据库, 3.创建数据表, 4.插入数据, 5.查询数据并打印, 6.关闭数据库, 具体操作步

UI学习笔记---第一天

一.iOS概述 iOS是Apple公司的移动操作系统,主要?用于iPhone.iPad.iPad Mini.iPod Touch等移动产品. 借助iOS,我们可以开发视频类.美图类.新闻类.?音乐类.团购类.电商类.阅读类.出?行类.?生活服务类.游戏类等应?用程序. 除此之外,iOS还可以与外部设备通信,开发出更多改变?活的产品,?比 如:智能家居(iOS App控制电视.空调等).健?产品(将人体健康 状况通过App直观的展现出来)等. 二.UI概述 UI(User Interface):?

UI学习笔记---第十四天数据持久化

一.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内斗放在了统一的文件夹目录下 沙盘路径的位置 1. 通过Finder查找程序沙盘相对路径 ~/Library/Application Support/iPhone Simulator 2. 通过代码查找程序沙盘相对路径 NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearc

开源中国iOS客户端学习

开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html 开源中国iOS客户端学习——序 说到这款开源软件就得提到她的娘家了--开源中国社区: 开源中国社区简介:开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区.传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现.使用.并交流开源技术的平台.目前开源中国社区已收