UISearchController的简单实用

iOS基础 自定义转场控制器UIPresentationController 概述 基本上苹果提供的控制器转场都能满足我们的需求,比如反转、淡入淡出、翻页、从下往上显示等等,这都可以通过设置控制器实现。 但如果有一些特殊的需求,比如只在一小块区域显示新控制器的内容。当然你也可以通过一些复杂的方式在原本的控制器上自定义一个小View来实现,但那样会增加原控制器的业务负担。 实际上,我们可以通过自定义UIPresentationController来控制新controller的展示形式,这只需要在转场相关的代码部分设置一下代理,原控制器再遵守以下该转场控制器的协议就可以了。 具体 阅读详情

iOS --- 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UIS

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

添加UISearchController属性:

@property(strong, nonatomic) UISearchController *searchController;
@property(strong, nonatomic) NSMutableArray *allCities; // 所有城市
@property(strong, nonatomic) NSMutableArray *filteredCities; // 根据searchController搜索的城市


UISearchController初始化

在viewDidLoad中初始化UISearchController:


  self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
  self.searchController.searchResultsUpdater = self;
  self.searchController.dimsBackgroundDuringPresentation = false;
  [self.searchController.searchBar sizeToFit];
  self.searchController.searchBar.backgroundColor = UIColorFromHex(0xdcdcdc);
  self.tableView.tableHeaderView = self.searchController.searchBar;

UISearchResultsUpdating协议

使用UISearchController要继承UISearchResultsUpdating协议, 实现其中的UISearchResultsUpdating方法.


#pragma mark - searchController delegate

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
  [self.filteredCities removeAllObjects];
  NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", self.searchController.searchBar.text];
  self.filteredCities = [[self.allCities filteredArrayUsingPredicate:searchPredicate] mutableCopy];
  dispatch_async(dispatch_get_main_queue(), ^{
      [self.tableView reloadData];
  });
}

UISearchController的searchBar中的内容一旦发生变化, 就会调用该方法. 在其中, 我们可以使用NSPredicate来设置搜索过滤的条件.

更新UITableView

引入UISearchController之后, UITableView的内容也要做相应地变动: 即cell中要呈现的内容是allCities, 还是filteredCities. 

这一点, 可以通过UISearchController的active属性来判断, 即判断输入框是否处于active状态. 

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



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  if (!self.searchController.active) {
    return self.cityKeys.count;
  } else {
    return 1;
  }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  if (!self.searchController.active) {
    NSString *key = self.cityKeys[section];
    NSArray *citySection = self.cityDict[key];
    return citySection.count;
  } else {
    return self.filteredCities.count;
  }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  static NSString *CellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
  }
  // 根据UISearchController的active属性来判断cell中的内容
  if (!self.searchController.active) {
    NSString *key = self.cityKeys[indexPath.section];
    cell.textLabel.text = [self.cityDict[key] objectAtIndex:indexPath.row];
  } else {
    cell.textLabel.text = self.filteredCities[indexPath.row];
  }
  return cell;
}


UISearchController的移除

在viewWillDisappear中要将UISearchController移除, 否则切换到下一个View中, 搜索框仍然会有短暂的存在.



- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];
  if (self.searchController.active) {
    self.searchController.active = NO;
    [self.searchController.searchBar removeFromSuperview];
  }
}
swift UI专项训练37 实时显示搜索结果的搜索框SearchBar 今天我们来讲点高级点的知识,在搜索框中输入关键字,下方的tableView自动匹配包含关键字的结果。用我最近在做的一款美食类APP为例。 在storyboard中拖入一张表,然后与Vc中的代码关联起来: @IBOutlet weak var tableView: UITableView! 获取我们所需要的菜品信息: var caipins = CaipinArray().caipinArr 阅读详情

相关推荐

IOS 用UISearchController搜索Tableview

原创Blog,转载请注明出处 blog.youkuaiyun.com/hello_hwc前言: 本文是Demo的第一阶段,简单的讲解如何使用UISearchController进行tableview搜索。下一篇文章会在这个基础上深一步讲解更多的代理函数和Tableview的使用。本文源代码只提供OC版本,下一篇我会提供OC和Swift两个版本。Demo效果 最简单的按照前缀来搜索 一 UISearc

Leo的专栏 8205

iOS - 搜索框UISearchController的使用(iOS8.0之后替代UISearchBar + UISearchDisplayController的组合)

原文链接:http://www.myexception.cn/operating-system/1962382.html iOS --- 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UISearchDisplayController的组合) 在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在

Ronaldo_Carry的博客 1199

Swift3-UISearchController的基本使用

在 iOS 8.0 之前实现搜索功能我们用的是UISearchBar 和UISearchDisplayController,但是在 iOS 8.0 之后上述方法已经被弃用,所以我们可以使用UISearchController进行替代.UISearchController一般用于搜索功能,通常的交互场景是在视图控制器一上有个SearchBar,不可输入,点击searchBar,展示视图控制器二此时s

欢迎来到Jack的程序世界 5959

iOS开发 - 使用UISearchController跳转新控制器时搜索框依然出现

最近偶遇一个问题,当使用UISearchController来push一个新的界面时,push成功后搜索框依然存在,不知道是不是苹果的一个bug,但是可以通过增加一句代码来解决: self.definesPresentationContext = YES;那么这句话什么意思呢? definesPresentationContext这是一个布尔变量,表示该视图被覆盖时,视图或者它的子类提供了一

CodingFire的博客 5925

设计一个订单管理系统(OMS)系统100问?

一个完善的订单管理系统不仅仅是简单地记录和处理订单信息,更需要考虑到订单的全生命周期管理,包括订单的创建、支付、配送、售后等环节。这100个问题围绕订单管理系统(OMS)的各个方面展开,涵盖了系统的功能、架构、安全性、异常处理、订单处理流程、支付、库存管理、客户管理、报表与分析等多个方面。通过这些问题,可以全面考虑订单管理系统在设计与实现过程中需要考虑的各种因素,从而确保系统能够满足业务需求、具有良好的性能和稳定性,同时易于扩展、维护和管理。

nbsaas-boot基于Request-Response的企业级快速开发框架 1384

手把手教你用8位单片机IO口直接驱动WS2812灯带(附完整代码和避坑指南)

本文详细介绍了如何使用8位单片机IO口直接驱动WS2812灯带,包括硬件准备、时序生成、色彩引擎与特效算法的实现,以及调试技巧与性能优化。通过汇编语言优化和精确时序控制,实现高效的LED驱动和炫酷的彩虹灯效,适合嵌入式开发者和硬件爱好者参考。

weixin_42696271的博客 304

IOS中搜索框UISearchBar及搜索方法的使用

搜索框可以用UISearchBar,并且可以设置代理UISearchBarDelegate。 1 -(void)addSearchBar{ 2 CGRect searchBarRect = CGRectMake(0, 0, self.view.frame.size.width, 44); 3 UISearchBar *searchBar = [[UISearchBa...

weixin_30597269的博客 228

组态王|组态王通过选择日期实现历史数据的查询

②在弹出的【插入通用控件】对话框选择【Calender Control】控件,然后点击【确定】按钮,关闭对话框,然后在画面上适当的位置按住鼠标左键并拖动,绘制出一个矩形框,放开鼠标,就完成了控件的绘制。此函数将指定的时间格式(年,月,日,时,分,秒)转换为以秒为单位的长整型数,转换的时间基准是UTC(格林尼治)1970年1月1日00:00:00。实现内容,通过两个日历控件选择开始日期和结束日期,然后点击【历史数据查询】按钮,在报表中显示对应时间段的数据集。另外你用过哪些组态软件?

做有价值的事,积累有价值的笔记! 4562

UISearchController使用中遇到的坑

这次开发需要用到搜索框, 以前大都是使用UITtexField进行自定义的,这次使用了UISearchController. 在iOS8之前,使用的的是UISearchDisplayController+SearchBar的组合, iOS8之后,原有的方式废弃, 苹果推荐使用UISearchController,其本身包括searchBar.但是使用中出现了一系列问题 UISearchC...

xfy6238的博客 2429

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 702

【清风数学建模笔记】第十一讲:时间序列分析

【清风数学建模笔记】第十一讲:时间序列分析

manerzi的博客 832

iOS本地数据搜索 - UISearchController的简单实用

利用UISearchController和谓词实现iOS的数据搜索功能

blueCat_1128的博客 2990

02-Cesium-实现天地图标记

首先天地图申请token,然后Cesium-实现天地图标记详细说明

m0_62785037的博客 1171

UISearchController进行网络实时搜索

首先设置一个搜索button用以触发搜索 接下来到方法中进行 UISearchController的创建需要指定一个展示搜索结果的控制器, 如果填nil默认为当前控制器. 在实际应用中, 当前控制器并不适合展示结果, 所以新建了一个tableview展示结果.  如果当前控制器的导航栏是不透明的, 需要设置 [_searchVC setHidesNavigationBarD

FlyCat1992的博客 1870

Synopsys SCL许可证服务器搭建详解:从安装到生成.dat文件

本文详细解析了Synopsys SCL许可证服务器的完整搭建流程,从系统环境准备、SCL安装到生成.dat文件。重点阐述了如何正确获取HOST ID、配置License文件以及调试常见故障,为数字芯片设计工程师提供了一套从零到一的实战避坑指南,确保EDA工具链稳定运行。

weixin_29306011的博客 611

14、Java 中 TAF 和 FCF 的使用及 Oracle 数据库升级与迁移指南

本文详细介绍了Java中实现高可用性的TAF(透明应用故障转移)和FCF(快速连接故障转移)技术,以及如何将Oracle 9iR2 RAC环境升级到10gR2 RAC,并将数据从OCFS迁移到ASM。通过示例代码和操作步骤,帮助开发者和数据库管理员更好地应对数据库故障和数据迁移问题,提升系统的可用性和性能。

egg99的博客 110

UISearchController

一、搜索功能我相信很多app都用得上,iOS系统提供做搜索的类有那几种呢? 1.UISearchBar,这个相信大多数开发者都用过,这个只是提供搜索框,其实就是跟一个UITextField没啥区别,只是在textfield封装了多点内容。 2.UISearchDisplayController,这个玩意是iOS8之前,专门用来做搜索功能,对的,它就是一个控制器,他为你提供苹果那种搜索风格的转场

xin_g_zhang的专栏 926

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IOS中UISearchcontroller的用法

1.searchResultsUpdater:设置显示搜索结果的控制器     _mySearchController.searchResultsUpdater = self; 2.dimsBackgroundDuringPresentation:设置开始搜索时背景显示与否     _mySearchController.dimsBackgroundDuringPresentatio

4084

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

UISearchController的简单应用以及searchBar背景颜色的修改

最近在学习UISearchController,在这里,就分享一下自己的总结 因为searchBar 自带颜色,所以想要修改,就在网上找了一些资料,最后达成了自己想要的结果 // // ViewController.m // UI_UISearchController // // Created by Summer on 16/9/8. // Copyright © 2016年

yanyuxiaoxiang的博客 2164

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

UISearchController - 搜索控制器

1、概述一个UISC对象管理基于searchBar的搜索结果的展示。UISC对象通常与两个自定义的 view controller一起工作,第一个显示可搜索的内容,第二个显示搜索结果。第一个VC是主界面的一部分,第二个是你通过initWithSearchResultsController:初始化的VC。UISC对象包含一个UISearchBar对象(searchBar),你必须把他分配给第一个vie

笨鱼@Blog 1603

iOS开发:关于UISearchController的简单使用

       UISearchController是iOS8以后推出的一个控件,在以前的搜索控制器中,需要将searchBar于tableView结合使用。有了这个控件之后,做搜索控制器就很简单了。   效果图 一、需要遵守的协议     由于是tableView和SearchController结合使用,所以需要分别遵守两者的共四个协议UITableViewDelegate、UIT...

烟雨平生的博客 8939

UISearchController使用时,UISearchBar显示的问题

问题:iOS的提供实现搜索功能的SDK:UISearchController(iOS8.0之后)、UISearchDisplayController(iOS8.0之前,iOS8.0之后不建议再使用)。最近在做搜索的时候使用到了UISearchController,恰好NavigationController里有一个手势驱动返回。但是当在搜索页向右滑动界面时,UISearchController的U

boyuanguiren的博客 1万+

UI学习: UISearchController基础了解和应用

在iOS26之后, UISearchController 默认是添加到toolbar中的,也就是显示在屏幕的下方, 如果要想让 UISearchController 显示在导航栏中, 就需要添加以下代码, 用来规定UISearchController 的位置。另外, 还有一个更重要的部分,就是让数组 filteredData 根据搜索框中的内容实时更新, 这里就需要用到上面提到的 UISearchController 的协议方法,首先, 需要遵守协议, 用于在搜索栏中输入后更新搜索结果。

for_ever_love__的博客 276

【iOS】—— 浅谈UISearchController

UISearchController是iOS的一个系统的搜索控件,在平时我们输入信息的时候会出现相应的联想搜索的内容,然后通过UITableView展示到搜索框的下面,供我们选择。原本还想用UITextField来实现这个功能,人家现在有,那就浅学习一手。 一、需要遵守的协议: 因为它用到的UITableView所以一定是要用到UITableViewDelegate, UITableViewDataSource的,另外我们要实现其联想搜索功能还的遵守这两个协议UISearchControllerDelega

m0_55124878的博客 2199

IOS-搜索功能实现, UIsearchController的使用

开发中,搜索功能使用的频率自然不言而喻, 本文主要讲一些常用的 1.先创建一个搜索框(比较简单的一个搜索框, 系统自带的) - (void)viewDidLoad {     [super viewDidLoad];     // Do any additional setup after loading the view, typically from a nib.

小菜鸟的专栏 1万+
上一篇: IOS之抖动效果
下一篇: UILable 的自使用 iOS
网上的虫
博客等级 码龄11年 8粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值