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 属性规定输入字段是否应该启用自动完成功能. 自动完成允许浏览器预测对字段的输入.当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在 ...
随机推荐
- Asp.net WebAPI Request参数验证-请不要重复造轮子
随着web客户端的发展,现在很多公司都有专业的前端开发,做到系统前后端分离.ap.net后端典型的就是采用webapi,但是发现很多时候大家对webapi并不了解,这里我们来说说输入参数的验证.前一段 ...
- iOS开发-简单抽奖
路过商场,看过抽奖感觉挺有意思的,商场进行抽奖活动,三个奖项,一等奖的概率1/10,二等奖的概率的3/10,三等奖的概率是6/10,具体奖品我没仔细看,回来随便练手了一下,思考了一下,奖品分为10份, ...
- Mac系统下编译支持Android平台的最新X264编码器
Mac系统下编译支持Android平台的最新X264编码器 原文来自 http://www.mingjianhua.com,转载请注明出处 1.首先去官网下载最新的x264源代码,解压到任意目录 ht ...
- iPhone8发布后那些搞笑Geek段子合辑 #精选搞笑GEEK段子
这些段子能把人笑出猪叫声哈哈哈哈哈哈哈哈哈哈哈哈嗝 前方高能!请带好安全帽观看段子手们的表演 只能帮你们到这里了 加了半截刘海,怎么像和天猫合作的了? 杜蕾斯的追热点也很及时啊!十年如一日是啥意思 ...
- 带你走进EJB--将EJB发布为Webservice(3)
在上面文章中我们讲到,通过使用用JBoss5作为EJB容器的时候,调用Web服务出现了异常. 异常信息如下: *********************** CreateWeb Service Cli ...
- Transaction And Lock--READ COMMITTED隔离级别下的"脏读"
在READ UNCOMMITTED事务隔离级别下或使用WITH(NOLOCK)来查询数据时,会出现脏读情况,因此对于一些比较"关键"的业务,会要求不能使用WITH(NOLOCK)或 ...
- Linux中找出占用内存最多的前N个进程
一.使用ps命令 ps -aux | sort -k4nr | head -N *命令详解: 1. head:-N可以指定显示的行数,默认显示10行. 2. ps:参数a指代all——所有的进程,u指 ...
- app_offline.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...
- 使用变量向SQL Server 2008中插入数据
QT通过ODBC连接数据库SQL Server 2008,进行数据插入时遇到的问题: 先把数据存入变量中,如何使用变量进行插入?插入语句该怎么写? QSqlQuery query(db); query ...
- Mysql Left Join Where On
select t1.id,t2.idfrom t1left join t2 on t1.id = t2.id and t1.id>1 and t2.id<>3在mysql的left ...