uitableview 和UISearchBar 下拉提示结合使用
自定cell的代码
餐厅的实体和餐厅对应控件的frame
#import <Foundation/Foundation.h>
@class RestaurantFrame;
@interface Restaurant : NSObject
@property(nonatomic,copy)NSString *restaurantIcon;
@property(nonatomic,copy)NSString *restaurantTitle;
@property(nonatomic,copy)NSString *restaurantSubTitle;
@property(nonatomic,retain) RestaurantFrame *frame;//初始化内容的时候也要得到餐厅中控件的位置和内容
+(id)RestaturantImage:(NSString *)image Title:(NSString *)title subTitle:(NSString *)subtitle;
@end @implementation Restaurant +(id)RestaturantImage:(NSString *)image Title:(NSString *)title subTitle:(NSString *)subtitle{
Restaurant *res=[[Restaurant alloc] init];
res.restaurantIcon=image;
res.restaurantTitle=title;
res.restaurantSubTitle=subtitle;
res.frame=[[RestaurantFrame alloc] initWithRestaurant:res];
return [res autorelease]; } - (void)dealloc
{
[_restaurantIcon release];
[_restaurantTitle release];
[_restaurantSubTitle release];
[_frame release];
[super dealloc];
}
@end
餐厅对应的cell的位置
#import "Restaurant.h"
#define KPadding 10
#define kImageWidth 100
#define KImageHeight 100
#define KTitleFont 15
#define kSubFont 12
@implementation RestaurantFrame
-(id)initWithRestaurant:(Restaurant *)res{
if(self=[super init]){
CGFloat width=[UIScreen mainScreen].bounds.size.width ;
//通过内容算大小
CGFloat imagex=KPadding;
CGFloat imgagey=KPadding;
CGFloat imgagew=kImageWidth;
CGFloat imgageh=KImageHeight;
_restaurantImageFram=CGRectMake(imagex,imgagey,imgagew,imgageh); CGFloat labelx=imagex+KPadding+imgagew;
CGFloat labely=imgagey;
CGFloat labelw=width-imgagew-imagex-KPadding*;
CGFloat labelh=[UIFont systemFontOfSize:KTitleFont].lineHeight;
_restaurantLabelFram=CGRectMake(labelx,labely,labelw,labelh); CGFloat sublabelx=labelx;
CGFloat sublabely=imgagey+labelh+KPadding;
CGFloat sublabelw=labelw;
CGFloat sublabelh= [res.restaurantSubTitle sizeWithFont:[UIFont systemFontOfSize:kSubFont] constrainedToSize:CGSizeMake(sublabelw, ) lineBreakMode:NSLineBreakByCharWrapping].height; _resSubTitle=CGRectMake(sublabelx, sublabely, sublabelw, sublabelh); _cellHeight=imgageh;
}
return self; }
@end
cell内部初始化的控件的位置
#import <UIKit/UIKit.h>
@class Restaurant;
@interface UIMyCell : UITableViewCell //把餐厅信息设置到cell
@property(nonatomic,retain)Restaurant *rest; @property(nonatomic,readonly)UIImageView *Resimageview;
//@property(nonatomic,readonly)UILabel *titleLabel;
@end #import "UIMyCell.h"
#import "Restaurant.h"
#import "RestaurantFrame.h" @interface UIMyCell()
{
UILabel *_subTitle;
UILabel *_TitleLabel;
}
@end
@implementation UIMyCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
UIImageView *imageview=[[UIImageView alloc] init];
[self.contentView addSubview:imageview];
_Resimageview=imageview;
[imageview release]; UILabel *TitleLabel=[[UILabel alloc] init];
TitleLabel.backgroundColor=[UIColor clearColor];
TitleLabel.font=[UIFont systemFontOfSize:];
[self.contentView addSubview:TitleLabel];
_TitleLabel=TitleLabel;
[TitleLabel release]; UILabel *subTitle=[[UILabel alloc] init];
subTitle.backgroundColor=[UIColor clearColor];
subTitle.font=[UIFont systemFontOfSize:];
subTitle.numberOfLines=; [self.contentView addSubview:subTitle];
_subTitle=subTitle;
[subTitle release];
}
return self;
} -(void)setRest:(Restaurant *)rest{
if(_rest!=rest){
_rest=[rest retain]; _Resimageview.image=[UIImage imageNamed:rest.restaurantIcon];//设置默认图片
_TitleLabel.text=rest.restaurantTitle;
_subTitle.text=rest.restaurantSubTitle;
}
} - (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated]; // Configure the view for the selected state
} - (void)dealloc
{
self.rest=nil;
[super dealloc];
} -(void)layoutSubviews{
[super layoutSubviews];
_Resimageview.frame=self.rest.frame.restaurantImageFram;
_TitleLabel.frame=self.rest.frame.restaurantLabelFram;
_subTitle.frame=self.rest.frame.resSubTitle;
} @end
第一步在主视图控制器中 加载一个UISearchBar 和UITableview
-(void)Inittableview{
//初始化主view中tableview 加载到self.view上
CGFloat viewx=;
CGFloat viewy=;
CGFloat vieww=self.view.bounds.size.width;
CGFloat viewH=self.view.bounds.size.height-;
UITableView *view=[[UITableView alloc] initWithFrame:CGRectMake(viewx,viewy,vieww,viewH)];
view.delegate=self;
view.dataSource=self;
_tableview=view;
UIView *bgview=[[[UIView alloc] init] autorelease];
bgview.backgroundColor=[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:0.8];
view.backgroundView=bgview;
[self.view addSubview:view];
[view release];
//初始化搜索框,在self.view上
UISearchBar *searchbar=[[[UISearchBar alloc] initWithFrame:CGRectMake(, ,, kSearchSize)] autorelease];
searchbar.placeholder=@"please enter keyword";
searchbar.autocorrectionType=UITextAutocapitalizationTypeNone;
searchbar.delegate=self;//设置代理
//添加下拉框
SearchViewController *searchVC=[[[SearchViewController alloc] initWithStyle:UITableViewStylePlain] autorelease];
[searchVC .view setFrame:CGRectMake( , , , )];//0加载的时候高度为0隐藏
[self.view addSubview:searchVC.view];
_searchVC=searchVC;
[self addChildViewController:searchVC];
view.tableHeaderView=searchbar;
[searchbar release];
}
tableview 的代理方法 cell是自定义的
#pragma mark -tableview datesource
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return ;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
returnself.mydata.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIndentify=@"mycell";
UIMyCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIndentify];
if(cell==nil){
cell=[[[UIMyCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:cellIndentify] autorelease];
}
Restaurant *res=self.mydata[indexPath.row];
cell.rest=res;
return cell;
}
#pragma mark -tableview delegate
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
Restaurant *rest=self.mydata[indexPath.row];
return rest.frame.cellHeight;
}
自定义下拉是一个uitableviewcontroller
//
// SearchViewController.h
// MyTestDemo001
//
// Created by ganchaobo on 13-6-22.
// Copyright (c) 2013年 ganchaobo. All rights reserved.
// #import <UIKit/UIKit.h> @interface SearchViewController : UITableViewController
@property(nonatomic,assign)NSMutableArray *mydate;
@end
#import <QuartzCore/QuartzCore.h>
@interface SearchViewController () @end
#import "Restaurant.h"
@implementation SearchViewController - (void)viewDidLoad
{
[super viewDidLoad];
//初始化的设置隐藏的tableiew的边框
self.tableView.layer.borderWidth=;
self.tableView.layer.borderColor=[UIColor blackColor].CGColor;
// Do any additional setup after loading the view. } #pragma mark -delegate source
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return ;
} -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.mydate==nil?:self.mydate.count;
} -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIndentify=@"SearchViewController";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIndentify];
if(cell==nil){
cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentify] autorelease];
}
if(self.mydate!=nil){//第一加载为空。第二次有值
Restaurant *res=self.mydate[indexPath.row];
cell.textLabel.text=res.restaurantTitle;
}
return cell;
} -(void)setMydate:(NSMutableArray *)mydate{
_mydate=mydate;//给外界设置。
[self.tableView reloadData];
} - (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
在主窗口中设置下拉的uitableviewcontroller在view中隐藏和现实的位置
-(void)setSearchControllerHidden:(BOOL)hidden{
NSInteger height=hidden?:;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.1f];
_searchVC.view.frame=CGRectMake(, , , height);
[UIView commitAnimations];
}
searchbar 的代理方法 用的时候两个数组来完成,先清楚一个,然后遍历另一个数组
#pragma mark -searchbar
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self SearchData:searchText];
}
//search
-(void)SearchData:(NSString*)searchText{
[self.mydata removeAllObjects];//清除原来的
if(searchText.length!=){
for (Restaurant *res in self.searchdata) {
NSRange range=[res.restaurantTitle rangeOfString:searchText];
if(range.length>){
[self.mydata addObject:res];//填充匹配的数据
//现实下拉
[self setSearchControllerHidden:NO];
}
}
_searchVC.mydate=_mydata;
}
else{
for (Restaurant *res in self.searchdata) {
[self.mydata addObject:res];//填充匹配的数据
}
[self setSearchControllerHidden:NO];
}
[_tableview reloadData];
}
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
searchBar.text=@"";
}
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{
searchBar.showsCancelButton=YES;
for (id cc in searchBar.subviews) {
if([cc isKindOfClass:[UIButton class]]){
UIButton *btn=(UIButton *)cc;
[btn setTitle:@"取消" forState:UIControlStateNormal];
}
}
return YES;
}
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
searchBar.text=@"";
[self SearchData:searchBar.text];
[searchBar resignFirstResponder];
//当点击取消按钮的时候隐藏
[self setSearchControllerHidden:YES];
}
uitableview 和UISearchBar 下拉提示结合使用的更多相关文章
- 基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
基于jQuery的input输入框下拉提示层,方便用户输入邮箱时的提示信息,需要的朋友可以参考下 效果图 // JavaScript Document (function($){ $.fn ...
- Ajax跨域:Jsonp实例--百度搜索框下拉提示
Ajax跨域:Jsonp实例--百度搜索框下拉提示 一.总结 一句话总结:a.找好接口:b.用script标签的src引入文件(json数据):c.定义及实现上一步引入文件中的函数 1.如何找到一个网 ...
- iOS开发-UITableView顶部图片下拉放大
关于顶部图片下拉放大,在用户展示的个人中心显示用户个人头像信息,设置UITableView的headerView实现,UITableView继承自UIScrollView,同样的设置UIScrollV ...
- jQuery 实现带下拉提示且自动填充的邮箱
/* ** 本文例子所引用的jQuery版本为 jQuery-1.8.3.min.js ** Author:博客园小dee*/ 本文用 jQuery 实现一个用户输入字符时出现能够提示邮箱后缀名的下拉 ...
- vue实现百度搜索下拉提示功能
这段代码用到vuejs和vue-resouece.实现对接智能提示接口,并通过上下键选择提示项,按enter进行搜索 <!DOCTYPE html> <html lang=" ...
- angular的跨域(angular百度下拉提示模拟)和angular选项卡
1.angular中$http的服务: $http.get(url,{params:{参数}}).success().error(); $http.post(url,{params:{参数}}).su ...
- Ajax跨域实现淘宝/百度搜索下拉提示效果
最近学到Ajax,觉得自己对与前后端的数据交互有了一个基本的了解.下面是Ajax应用到淘宝/百度的搜索功能的一个简单的小实例,就是输入一个词,下拉框中自动显示匹配的内容:
- input text 去掉标签下拉提示
autocomplete 属性 autocomplete 属性规定输入字段是否应该启用自动完成功能. 自动完成允许浏览器预测对字段的输入.当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在 ...
- input text 去掉标签下拉提示autocomplete
autocomplete 属性 autocomplete 属性规定输入字段是否应该启用自动完成功能. 自动完成允许浏览器预测对字段的输入.当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在 ...
随机推荐
- 第二章 TypeScript 开发环境搭建
Mac OS X 下 TypeScript 开发环境搭建 一.集成开发环境 WebStrom VSCode 二.安装 TypeScript Homebrew(macOS 缺失的软件包管理器) ruby ...
- 详解vue组件的keep-alive
<keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM. <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是 ...
- java log4j日志配置
1.首先看pom.xml文件,需要以下配置 <dependency> <groupId>log4j</groupId> <artifactId>log4 ...
- sql-获取指定年份指定月份的天数
declare @年月 varchar(6) set @年月= '201803' --查询2015年2月有多少天 select day(dateadd(month,1,@年月+ '01 ')-1)
- tcp socket/ unix socket
A UNIX socket is an inter-process communication mechanism that allows bidirectional data exchange be ...
- GPUImage简单滤镜使用(二)
GPUImage中,提供了许多简单的的常用的滤镜.在上一篇文章讲了如何调节图像的亮度这片文章讲一下如何通过GPUImage调节图像的对比度,饱和度,曝光度,和白平衡(美图秀秀中的色温). 原图像 调整 ...
- docker安装tomcat
先在官网上找可用的镜像 我使用的是7-jre8 获取tomcat镜像的命令:$docker pull tomcat:7-jre8 获取完镜像以后,通过命令可以列举出已有的镜像: 列举镜像的命令:$do ...
- Linux中10个有用的命令行补齐命令
本文转自GeekFan,感觉确实比较极客范啊,[TAB][TAB]补全都知道,但是你知道可以定制化补全吗? ---------------------------------------------- ...
- Centos7中修改Hostname的方法
一.Centos7中修改的方法: hostnamectl set-hostname <new hostname> 说明:centOS 7 里面修改hostname的方式有所改变,修改/et ...
- ACID、Data Replication、CAP与BASE
ACID 在传数据库系统中,事务具有ACID 4个属性. (1) 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. (2) 一致性(Consiste ...