搜索栏+collectionView实现
效果图如下:

@property (nonatomic,weak) BaseViewController *parentController;
- (instancetype)initWithParentControler:(BaseViewController *)controller;
- (void)prepareView;
@end
{
if (self = [superinit]) {
_parentController = controller;
}
returnself;
}
self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
self.backgroundColor = NF_Color_C20;
_page = 1;
_gameRoomDataArray = [NSMutableArrayarray];
_sessionArray = [NSMutableArrayarray];
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayoutalloc] init];
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
layout.sectionInset = UIEdgeInsetsMake(10, 9, 15, 9);
layout.minimumInteritemSpacing = 9;
layout.minimumLineSpacing = 9;
self.gameRoomCollectionView = [[UICollectionViewalloc]initWithFrame:CGRectMake(0, 44+20, SCREEN_WIDTH, SCREEN_HEIGHT-44-20) collectionViewLayout:layout];
self.gameRoomCollectionView.delegate = self;
self.gameRoomCollectionView.dataSource = self;
self.gameRoomCollectionView.backgroundColor = NF_Color_C16;
[self.gameRoomCollectionViewregisterClass:[IDSGameRoomHomePageChangeCellclass] forCellWithReuseIdentifier:@"THEcellid"];
self.gameRoomCollectionView.showsVerticalScrollIndicator = NO;
self.gameRoomCollectionView.showsHorizontalScrollIndicator = NO;
MJRefreshFooter *footer = [IDSRefreshfooterWithRefreshingTarget:selfrefreshingAction:@selector(footerVoid)];
_gameRoomCollectionView.mj_footer = footer;
self.gameRoomCollectionView.mj_footer.hidden = YES;
[selfaddSubview:_gameRoomCollectionView];
[selfaddSearchBar];
[_parentController.viewaddSubview:self];
}
if (!self.searchBar) {
self.searchBarBoundsY = 20;
self.searchBar = [[UISearchBaralloc]initWithFrame:CGRectMake(0,self.searchBarBoundsY, [UIScreenmainScreen].bounds.size.width, 44)];
self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
self.searchBar.tintColor = NF_Color_C27;
self.searchBar.barTintColor = NF_Color_C1;
self.searchBar.delegate = self;
self.searchBar.placeholder = @"搜索房号/房间名";
[self.searchBarsetAutocorrectionType:UITextAutocorrectionTypeNo];
[self.searchBarsetAutocapitalizationType:UITextAutocapitalizationTypeNone];
[[UITextFieldappearanceWhenContainedIn:[UISearchBarclass], nil] setTextColor:[UIColorblackColor]];
}
if (![self.searchBarisDescendantOfView:self]) {
[selfaddSubview:self.searchBar];
}
[self.searchBarsetShowsCancelButton:YESanimated:NO];
[self.searchBarbecomeFirstResponder];
if (![_queryNoticeTimerisValid]) {
[selfstartQueryTimer];
}
}
{
[self.searchBarsetShowsCancelButton:YESanimated:NO];
[self.searchBarresignFirstResponder]; //searchBar失去焦点
UIButton *cancelBtn = [self.searchBarvalueForKey:@"cancelButton"]; //首先取出cancelBtn
cancelBtn.enabled = YES; //把enabled设置为yes
}
{
[selfhiddenKeyBoard];
}
{
for (UIView *oneView inself.subviews) {
[oneView removeFromSuperview];
}
}
- (void)removeView
{
[selfremoveAllSubviews];
[selfremoveFromSuperview];
}
[selfstopQueryTimer];
if (searchText.length>0) {
self.searchBarActive = YES;
_searchWord = searchText;
[selfstartQueryTimer];
[self.gameRoomCollectionViewreloadData];
}else{
self.searchBarActive = NO;
[selfremoveEmptyView];
[self.gameRoomDataArrayremoveAllObjects];
[self.gameRoomCollectionViewreloadData];
}
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
[selfcancelSearching];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
[selfhiddenKeyBoard];
}
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
[self.searchBarsetShowsCancelButton:YESanimated:YES];
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{
[selfhiddenKeyBoard];
[selfdataRequest];
}
-(void)cancelSearching{
[selfremoveView];
}
{
IDSLOG(@"IDSGameRoomSearchPage Dealloc.");
[selfreleaseSelf];
}
- (void)releaseSelf
{
self.gameRoomCollectionView.delegate = nil;
self.gameRoomCollectionView.dataSource = nil;
_gameRoomCollectionView = nil;
self.searchBar = nil;
[selfstopQueryTimer];
}
{
[selfstopQueryTimer];
if (nil == _queryNoticeTimer) {
_queryNoticeTimer = [NSTimerscheduledTimerWithTimeInterval:sIntervalTime
target:self
selector:@selector(dataRequest)
userInfo:nilrepeats:NO];
}
}
- (void)stopQueryTimer
{
if (self.queryNoticeTimer) {
[self.queryNoticeTimerinvalidate];
_queryNoticeTimer = nil;
}
}
{
if (!label.text.length) {
return;
}
NSMutableAttributedString *attributedString = [[NSMutableAttributedStringalloc] initWithString:label.text];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStylealloc] init];
[paragraphStyle setLineSpacing:spacing];
[attributedString addAttribute:NSParagraphStyleAttributeNamevalue:paragraphStyle range:NSMakeRange(0, [label.textlength])];
if (_searchWord) {
NSRange redRange = [[ [attributedString string] lowercaseString] rangeOfString:[_searchWordlowercaseString]];
if (redRange.length <= [label.textlength]) {
[attributedString setAttributes:@{NSForegroundColorAttributeName:NF_Color_C19,NSFontAttributeName:[UIFontsystemFontOfSize:Near_Final_Font_T9]}range:redRange];
}
}
[label setAttributedText:attributedString];
label.lineBreakMode = NSLineBreakByCharWrapping;
[label sizeToFit];
}
搜索栏+collectionView实现的更多相关文章
- 用collectionview实现瀑布流-转(后面附demo,供参考)
算法总体思路 先说一下总体上的思路.既然图片的大小.位置各不一样,我们很自然地会想到需要算出每个item的frame,然后把这些frame赋值给当前item的UICollectionViewLayou ...
- CollectionView水平和竖直瀑布流的实现
最近在项目中需要实现一个水平的瀑布流(即每个Cell的高度是固定的,但是长度是不固定的),因为需要重写系统 UICollectionViewLayout中的一些方法通过计算去实现手动布局,所以本着代码 ...
- tableViewCell嵌套collectionView,动态高度
方法有很多,有通过内容高度,经过代理回调,刷新的,甚至还有计算cell个数,然后根据cell大小计算的,这里推荐iOS 8新特性,通过AutoLayout,利用内容将cell撑起来; 关键代码: vi ...
- iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调
UICollectionView的布局是可以自己定义的,在这篇博客中先在上篇博客的基础上进行扩充,我们先使用UICollectionViewFlowLayout,然后好好的介绍一下UICollecti ...
- WPF CollectionViewSource CollectionView
CollectionView 通俗讲就是可以对你绑定的集合可以进行 分组,排序 等功能 CollectionViewSource 根据字面意思是xxx的数据源 详细的介绍还是看 http://www ...
- ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用
做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...
- collectionview cell吸顶效果
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Hiragino Sans GB"; color: #cf8724 } ...
- collectionview使用
创建UICollectionViewFlowLayout 对象来设置相关的布局,包括itemSize,headerReferenceSize,sectionInset.设置对应的布局大小,相关的和顶部 ...
- collectionView
// /* UICollectionView 类是iOS6 新引进的API,用于展示集合视图, 布局更加灵活,可实现多列布局,用法类似于UITableView类. - 更新视图: [collectio ...
随机推荐
- Vue中import '@...'是什么
今天看新项目代码,有import '@/assets/css/theme/index.css'一类的代码,里面的@是做什么的呢. 找到这篇文章https://www.cnblogs.com/bos ...
- mybatis在CRUD
一. 一个简短的引论: Mybatis本是apache的一个开源项目ibatis, 2010年这个项目由apache software foundation迁移到了google code, 而且改名为 ...
- 【50.88%】【Codeforces round 382B】Urbanization
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- new与属性访问的顺序,从一道JS面试题说起
这段时间一直在研究设计模式,在看工厂模式的时候,看到一段代码 VehicleFactory.prototype.createVehicle = function ( options ) { if( o ...
- 区间树(segment tree)
区间树能够对保存的数据进行适当的预处理,以快速回复查询. 区间树常用于在一维数组的特定区间对查询进行快速回复.区间树的最典型也是最简单的应用就是求区间最小值的问题. 区间树的基本思路是,生成表示给定数 ...
- Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践
原文:Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践 环境 本地 win7 服务器:Virtual Box 上的Centos ssh工具: Xshell 文件传输 ...
- python3 操作注册表
1.1 读取 import winreg key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows ...
- User-Agent 列表
<useragentswitcher> <folder description="Internet Explorer"> <useragent des ...
- 如何导入以前的qq聊天记录
作者:朱金灿 来源:http://blog.csdn.net/clever101 在新版的qq2013已经可以设置聊天记录的保存路径,但是如何把以前的聊天记录都导入进来呢?今天找到了办法.首先把原来q ...
- JQuery采纳CSS实现DOM显示和隐藏要素
今天参加了Code Review活动.阅读编写代码的同事,感到满足当前功能的实现,但是从长远来看,,无论角度还是从代码重用是来看显然不佳维修点. 有什么需要看的权利.通过选择不同的选项下拉框需求,为了 ...