搜索栏+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 ...
随机推荐
- 微信小程序预览图片
选择图片时可设置图片是否是原图,图片来源.这用的也挺常见的,比如个人中心中设置头像,可以与wx.upLoadFile()API使用 主要方法: wx.chooseImage(object) wxml ...
- CAP和最终一致性
查阅资料整理了最终一致性.CAP 相关的内容.由于图省事儿,没有做文字的整理记载,只有 slides 和一些查阅过的链接,大家将就着看.欢迎指正. slides: slides 链接:请戳这里 背景 ...
- node lesson6
https://nodejs.org/docs/latest/api/process.html#process_process_argv https://github.com/alsotang/nod ...
- Linux经常使用的命令(21) - find参数具体解释
一.使用name选项: 文件名称选项是find命令最经常使用的选项.要么单独使用该选项,要么和其它选项一起使用. 能够使用某种文件名称模式来匹配文件,记住要用引號将文件名称模式引起来. 无论当前路 ...
- Android - Earthquake工程(地震监测) 的 对
Earthquake工程(地震监测) 的 对 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24465487 Earthquake ...
- python3使用多代理访问网站
#------------------------------------------------------------------------------- # Name: module1 # P ...
- RTB业务知识2-Open-RTB全景
一个.前言 openrtb这是一套开源的竞价广告系统,来自IAB贡献,井. 有许多值太借鉴,提供sdk api接口文档介绍,整理了相关的资料.主要包含其生态图体系.业务流程和基本的对象模型和数据模型. ...
- Android Studio怎样提示函数使用方法
Eclipse有一个非常好的功能,就是当你代码调用某个android API时,鼠标移到相应的函数或者方法上,就会自己主动有一个悬 浮窗提示该函数的说明(所包括的參数含义,该方法功能).迁移到Andr ...
- C++ string的那些坑,C++ string功能补充(类型互转,分割,合并,瘦身) ,c++ string的内存本质(简单明了的一个测试)
1. size_type find_first_of( const basic_string &str, size_type index = 0 ); 查找在字符串中第一个与str中的某个字符 ...
- asp .net 页面跳转
ajax异步 通过ajax去请求数据,然后在js里面得到返回结果,赋值location.href <div> <input id="url" /> < ...