hopeanCom 发表于 2012-12-19 22:24:04

iphone实现下拉列表(iOS开发 )

<div id="cnblogs_post_body">iphone实现下拉列表(iOS开发 )
#import <UIKit/UIKit.h>
@interface DropDownList : UIView<UITableViewDelegate,UITableViewDataSource>
{
UITextField* textField;   //文本输入框
NSArray* list;            //下拉列表数据
BOOL showList;             //是否弹出下拉列表
UITableView* listView;    //下拉列表
CGRect oldFrame,newFrame;   //整个控件(包括下拉前和下拉后)的矩形
UIColor *lineColor,*listBgColor;//下拉框的边框色、背景色
CGFloat lineWidth;               //下拉框边框粗细
UITextBorderStyle borderStyle;   //文本框边框style
}

@property (nonatomic,retain)UITextField *textField;
@property (nonatomic,retain)NSArray* list;
@property (nonatomic,retain)UITableView* listView;
@property (nonatomic,retain)UIColor *lineColor,*listBgColor;
@property (nonatomic,assign)UITextBorderStyle borderStyle;

-(void)drawView;
-(void)setShowList:(BOOL)b;

@end




#import "DropDownList.h"

@implementation DropDownList

@synthesize textField,list,listView,lineColor,listBgColor,borderStyle;

- (id)initWithFrame:(CGRect)frame {
   
if(self=){
//默认的下拉列表中的数据
list=[initWithObjects:@"1",@"2",@"3",@"4",nil];

borderStyle=UITextBorderStyleRoundedRect;

showList=NO; //默认不显示下拉框
oldFrame=frame; //未下拉时控件初始大小
//当下拉框显示时,计算出控件的大小。
newFrame=CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height*5);

lineColor=;//默认列表边框线为灰色
listBgColor=;//默认列表框背景色为白色
lineWidth=1;   //默认列表边框粗细为1

//把背景色设置为透明色,否则会有一个黑色的边
self.backgroundColor=;
;//调用方法,绘制控件

}
return self;
}

-(void)drawView{
//文本框
textField=[
initWithFrame:CGRectMake(0, 0,
oldFrame.size.width,
oldFrame.size.height)];
textField.borderStyle=borderStyle;//设置文本框的边框风格
;
    ;

//下拉列表
listView=[initWithFrame:
CGRectMake(lineWidth,oldFrame.size.height+lineWidth,
oldFrame.size.width-lineWidth*2,
oldFrame.size.height*4-lineWidth*2)];
listView.dataSource=self;
listView.delegate=self;
listView.backgroundColor=listBgColor;
listView.separatorColor=lineColor;
listView.hidden=!showList;//一开始listView是隐藏的,此后根据showList的值显示或隐藏

;
;
}

-(void)dropdown{
;
if (showList) {//如果下拉框已显示,什么都不做
return;
}else {//如果下拉框尚未显示,则进行显示
//把dropdownList放到前面,防止下拉框被别的控件遮住

;
;//显示下拉框
}
}

#pragma mark listViewdataSource method and delegate method
-(NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section{
return list.count;
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellid=@"listviewid";
UITableViewCell* cell=;
if(cell==nil){
cell=[[initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellid]autorelease];
}
//文本标签
cell.textLabel.text=(NSString*);
cell.textLabel.font=textField.font;

cell.selectionStyle=UITableViewCellSelectionStyleGray;
return cell;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return oldFrame.size.height;
}

//当选择下拉列表中的一行时,设置文本框中的值,隐藏下拉列表
-(void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//NSLog(@"select");
textField.text=(NSString*);
//NSLog(@"textField.text=%@",textField.text);
;
}

-(BOOL)showList{//setShowList:No为隐藏,setShowList:Yes为显示
return showList;
}

-(void)setShowList:(BOOL)b{
showList=b;
NSLog(@"showlist is set ");
if(showList){
self.frame=newFrame;
}else {
self.frame=oldFrame;
}
listView.hidden=!b;
}
/*

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code.
}
*/

- (void)dealloc {
    ;
}



@end
iphone实现下拉列表(iOS开发 )
页: [1]
查看完整版本: iphone实现下拉列表(iOS开发 )