自定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 下拉提示结合使用的更多相关文章

  1. 基于jQuery的input输入框下拉提示层(自动邮箱后缀名)

    基于jQuery的input输入框下拉提示层,方便用户输入邮箱时的提示信息,需要的朋友可以参考下     效果图   // JavaScript Document (function($){ $.fn ...

  2. Ajax跨域:Jsonp实例--百度搜索框下拉提示

    Ajax跨域:Jsonp实例--百度搜索框下拉提示 一.总结 一句话总结:a.找好接口:b.用script标签的src引入文件(json数据):c.定义及实现上一步引入文件中的函数 1.如何找到一个网 ...

  3. iOS开发-UITableView顶部图片下拉放大

    关于顶部图片下拉放大,在用户展示的个人中心显示用户个人头像信息,设置UITableView的headerView实现,UITableView继承自UIScrollView,同样的设置UIScrollV ...

  4. jQuery 实现带下拉提示且自动填充的邮箱

    /* ** 本文例子所引用的jQuery版本为 jQuery-1.8.3.min.js ** Author:博客园小dee*/ 本文用 jQuery 实现一个用户输入字符时出现能够提示邮箱后缀名的下拉 ...

  5. vue实现百度搜索下拉提示功能

    这段代码用到vuejs和vue-resouece.实现对接智能提示接口,并通过上下键选择提示项,按enter进行搜索 <!DOCTYPE html> <html lang=" ...

  6. angular的跨域(angular百度下拉提示模拟)和angular选项卡

    1.angular中$http的服务: $http.get(url,{params:{参数}}).success().error(); $http.post(url,{params:{参数}}).su ...

  7. Ajax跨域实现淘宝/百度搜索下拉提示效果

    最近学到Ajax,觉得自己对与前后端的数据交互有了一个基本的了解.下面是Ajax应用到淘宝/百度的搜索功能的一个简单的小实例,就是输入一个词,下拉框中自动显示匹配的内容:

  8. input text 去掉标签下拉提示

    autocomplete 属性 autocomplete 属性规定输入字段是否应该启用自动完成功能. 自动完成允许浏览器预测对字段的输入.当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在 ...

  9. input text 去掉标签下拉提示autocomplete

    autocomplete 属性 autocomplete 属性规定输入字段是否应该启用自动完成功能. 自动完成允许浏览器预测对字段的输入.当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在 ...

随机推荐

  1. Construct Binary Tree from Inorder and Postorder Traversal Traversal leetcode java

    题目: Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume ...

  2. 异常捕获 UncaughtExceptionHandler MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 以快板之名说Android 应用程序电源管理

    当里个当,当里个当.Android开发UE(用户体验)为导向,首要任务便是省电量. 当里个当,当里个当.有一设备立足于墙边,这个设备唤固定电话.你的app造成这样,用户很快把你弃墙角.你咆哮耗电奈何与 ...

  4. Introduction to Learning to Trade with Reinforcement Learning

    http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/ The academic ...

  5. JAVA 中不错的开源FTP组件:commons-net

    第一步:引入jar到pom.xml. <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <dep ...

  6. webstorm和intellij idea下如何自动编译sass和scss文件

    webstorm和intellij idea下如何自动编译sass和scss文件 https://segmentfault.com/a/1190000008996504 https://www.jia ...

  7. [Algorithm] Print 2-D array in spiral order

    The idea to solve the problem is set five variable, first direction, we need to switch direction aft ...

  8. javascript 将treeNode 转换id和pid的Array

    function treeTolist(treeNodes, opt) { if (!opt) { opt = {}; opt.key = "id"; opt.parent = & ...

  9. selenium之 chromedriver与chrome版本映射表(更新至v2.38)

    https://blog.csdn.net/huilan_same/article/details/51896672 看到网上基本没有最新的chromedriver与chrome的对应关系表,便兴起整 ...

  10. 在Android Studio中打开Android Device Monitor时报错的解决方法

    在Android Studio中打开Android Device Monitor时报以下错误时(Android-SDK\tools\lib\monitor-x86_64\configuration\1 ...