UISearchController(使用)
效果图1

效果图2


其实一般是在第一种情况使用的UISearchController,但是第二种情况这种又懒得去用uisearchbar+uitableview等等去处理,
其实主要是对数据源的合理使用即可
UISearchController通常是用来排查数据的,比如当前的uitableviewcontroller有许多数据,排查之后需要更新显示数据。
首先UISearchController是联通主cntroller与结果controller桥梁
在主controller建立UISearchController对象
@interface UIViewControllerLocation ()
{
UISearchController* searchController0;
}
那么如何联通主controller
CGRect rectBar=CGRectMake(0, 0, self.view.frame.size.width, 44);
[searchController0.searchBar setFrame:rectBar];
[self.searchBar addSubview:searchController0.searchBar]; 以上代码需要理解的是searchController0.searchBar是一个只读属性,所以不能被assign,
self.searchBar是一个view
/**
* 搜索框
*/
@property (weak, nonatomic) IBOutlet UIView *searchBar;
不能够直接使用(UISearchBar)self.searchBar=searchController0.searchBar;只有tableview.tableHeaderView=searchController0.searchBar才有效果,同样是view不知道为什么
还有比较重要的一点就是,即使模拟器可以正常的显示,但是真机却无法显示searchBar(xcode7+iphone5s+ios8.3)
最终调试得出真机运行时searchController0.searchBar的frame是(0 0,0 0)需要重置frame才可以正常显示
那么如何联通结果controller
@interface UIViewControllerLocation ()
{
SearchResult* searchResult;
}
searchResult=[SearchResult new];
searchController0=[[UISearchController alloc] initWithSearchResultsController:searchResult];
SearchResult是一个uitableviewcontroller
然后是主controller作为了结果controller的数据更新者
searchController0.searchResultsUpdater=self;
需要遵循一个代理
@interface UIViewControllerLocation : UIViewController<UISearchResultsUpdating>
然后
//设置活跃性为YES否则需要自行推送结果controller
searchController0.active=YES;
那么主controller如何推送数据到 结果 controller
代理
/**
* 当搜索框开始改变时触发
*
* @param searchController
*/
-(void)updateSearchResultsForSearchController:(nonnull UISearchController *)searchController
{
searchResult.getResult(@[@,@,@,@,@,@]);
}
结果controller需要处理接受到的数据(使用的block)
#import <UIKit/UIKit.h>
#import "NSObjectDataSource.h"
/**
* 获取数据
*
* @param idData
*/
typedef void (^GetResult)(id idData);
@interface SearchResult : UIViewController
/**
* 获取数据的block
*/
@property(nonatomic,copy)GetResult getResult;
/**
* 查询数据列表
*/
@property (weak, nonatomic) IBOutlet UITableView *tabelview;
/**
* tableview的datasource代理
*/
@property(nonatomic,retain)NSObjectDataSource* dataSource;
@end
主controller里初始化结果controller的获取数据block
SearchResult*__weak weakSearchResult=searchResult;
searchResult.getResult=^(NSArray* array)
{
weakSearchResult.dataSource.nsArrayModels=array;
[weakSearchResult.tabelview reloadData];
};
在主controller里搜索更新时执行就可以了(只传递最终数据,数据的筛选需要自行处理)
UISearchController(使用)的更多相关文章
- UISearchController 的用法[点击搜索框,自动到顶部]
//在ViewDidLoad里面如下代码 self.searchViewController = [[UISearchController alloc]initWithSearchResultsCon ...
- iOS UISearchController的使用
在iOS9中,UISearchDisplayController 已经被UISearchController替代.搜索框是一种常用的控件. 假设我们要满足下图的需求,产生100个“数字+三个随机字母” ...
- iOS之搜索框UISearchController的使用(iOS8.0以后替代UISearchBar+display)
在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISe ...
- UISearchController使用
iOS8之前我们使用UISearchDisplayController做TableView的本地搜索 iOS8提供实现搜索功能的SDK:UISearchController(iOS8.0之后).UIS ...
- UItableview 添加 uisearchController
@property (nonatomic, strong) UISearchController* searchController; self.searchController = [[UISear ...
- UISearchController
搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UIS) 1.在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便 ...
- UITableView与UISearchController搜索及上拉加载,下拉刷新
#import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableVi ...
- iOS原生的搜索:UISearchController
iOS8之前我们使用UISearchDisplayController做TableView的本地搜索,查看UIKit库,苹果已经使用新控件取代它. NS_CLASS_DEPRECATED_IOS(3_ ...
- UISearchController Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior
Attempting to load the view of a view controller while it is deallocating is not allowed and may res ...
- iOS8以后 UISearchController的用法
查了不少资料,都不太全,自己查看了apple文档,写了一份代码: 如下(只是界面): 1. 声明属性 @property (nonatomic, strong) UISearchController ...
随机推荐
- 微信web开发者工具 && 微信调试页面
微信开发者工具 做微信公众号的过程中,自然避免不了登录账号然后进行调试,但是在chrome上我们没有办法登录,这是一个令人头疼的问题,比如这个公众号网页,只会提示出错,因为开发者限制了公众号网页的登录 ...
- schema的元素数据类型(复杂数据类型)
1.简单元素的声明 <xs:element name="元素名称" type="xs:string" default="默认值" mi ...
- Hibernate课程 初探多对多映射2-2 创建持久化类和映射文件
生成实体类 和 cfg.xml配置 cfg.xml 参照一对多映射 实体类如下: Project 类 package com.ddwei.entity; import java.util.HashSe ...
- P2626 斐波那契数列(升级版)
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数). 题目描述 ...
- FlexPaper查看Flash文件
HTML 代码: <head> <meta http-equiv="Content-Type" content="text/html; charset= ...
- Linux 学习 之 bash
Anything is programmable with defined syntax and common lib. Bash Shell is created to programme to L ...
- OMD开源监控软件
参考 Best Monitoring Solution - OMD (Nagios + Check_MK) 官网 mathias-kettner.com OMD labs.consol.de Conf ...
- 五环之歌之PHP分页
根据以往的经验,对于很多初学者,分页功能实现起来还是有一定的困难的,为了帮大家解决这样的问题:特此献上五环之歌.从此分页功能便是如小岳岳唱歌一样简练,漂亮,精干.哈哈,不闲扯了.正式进入千锋PHP五环 ...
- TP5.1:连接数据库(全局配置、动态配置、DSN配置)
前提: (1)在app\index\controller文件下新建一个名为Connect.php的控制器文件 (2)建立一个名为user_curd数据库,里面有一张user表,表内容为: 通过全局配置 ...
- char 与 signed char 和 unsigned char三者之间的关系
# char 与 signed char 和 unsigned char三者之间的关系 三者都占用 1个字节,即 8 bit signed char取值范围(-128, 127) unsigned c ...