搜索栏+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 初学笔记
1. 对 Vue 的理解 Vue.js 是一个以数据驱动和组件化的思想构建的 JavaScript MVVM 库,下载 Vue.js 后可以直接在html里引用,Vue 本身并不依赖 Node 运行. ...
- vue axios拦截器加全局loading
import axios from 'axios' import util from './util' import {showFullScreenLoading, tryHideFullScreen ...
- Computer system with dual operating modes
A system switches between non-secure and secure modes by making processes, applications, and data fo ...
- [C++学习笔记14]动态创建对象(定义静态方法实现在map查找具体类名对应的创建函数,并返回函数指针,map真是一个万能类)good
[C++学习笔记14]动态创建对象 C#/Java中的反射机制 动态获取类型信息(方法与属性) 动态创建对象 动态调用对象的方法 动态操作对象的属性 前提:需要给每个类添加元数据 动态创建对象 实 ...
- js小贴士
1.在js中 定义方法 方法名第一个字母小写.如果是定义类 则第一个字母大学 2.如果想在a标签中点击 触发js方法 而不跳转页面 可以使用类似 <a href="javascri ...
- Windows下静态编译Qt4
既然是静态编译,那就要编译出来的程序不信赖于任何dll文件.首先下载qt-win-opensource-4.7.4-mingw.exe: http://get.qt.nokia.com/qt/sour ...
- 在Expression Blend中制作侧面为梯形的类棱柱体
原文:在Expression Blend中制作侧面为梯形的类棱柱体 在上一篇"在WPF设计工具Blend2中制作立方体图片效果"( http://blog.csdn.net/joh ...
- C++安全异常std:auto_ptr
auto_ptr它是C++标准库(<utility>)为了一个智能指针类模板来解决资源泄漏所提供的问题(注意:这只是一个简单的智能指针) auto_ptr在事实原则的实现RAII,对资源的 ...
- Android备注26.Android异步任务(AsyncTask)
转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.引言 我们知道Android的UI线程主要负责处理用户的按键事件.用户触屏事件及屏幕画 ...
- SyncML协议简述(和HTTP协议有点类似)
目前,移动计算和通信设备的流行很大部分原因是因为它们具有一些方便的功能,比如说在需要时可以发送信息给其他用户,用户希望随时随地都可以利用掌上设备访问信息和执行应用程序,甚至在飞行中也可以获得和更新信息 ...