首页 » 技术分享 » iphone界面如何实现下拉列表

iphone界面如何实现下拉列表

 

iphone界面如何实现下拉列表


代码如下:
    

#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
=[
super
 initWithFrame:frame]){
    //默认的下拉列表中的数据
    list=[[NSArray alloc]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=[UIColor lightGrayColor];

//
默认列表边框线为灰色

    listBgColor=[UIColor whiteColor];

//
默认列表框背景色为白色

    lineWidth=

1
;     
//
默认列表边框粗细为
1

     
    //把背景色设置为透明色,否则会有一个黑色的边
    

self
.backgroundColor=[UIColor clearColor];
    [

self
 drawView];
//
调用方法,绘制控件

     
    }
    returnself

;

    }
    -(

void
)drawView{
    //文本框
    textField=[[UITextField alloc]
      initWithFrame:CGRectMake(

0

0
,
    oldFrame.size.width, 
    oldFrame.size.height)];
    textField.borderStyle=borderStyle;

//
设置文本框的边框风格

    [

self
 addSubview:textField];
        [textField addTarget:

self
 action:
@selector
(dropdown) forControlEvents:UIControlEventAllTouchEvents]; 
     
    //下拉列表
    listView=[[UITableView alloc]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的值显示或隐藏
     
    [

self
 addSubview:listView]; 
    [listView release];
    }
    -(

void
)dropdown{
    [textField resignFirstResponder];
    

if
(showList) {
//如果下拉框已显示,什么都不做
    return

;

    

}
else
{
//如果下拉框尚未显示,则进行显示
    //把dropdownList放到前面,防止下拉框被别的控件遮住
     
    [

self
.superview bringSubviewToFront:
self
];
    [

self
 setShowList:
YES
];
//
显示下拉框

    }
    }
    #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=[tableView dequeueReusableCellWithIdentifier:cellid];
    

if
(cell==
nil
){
    cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
      reuseIdentifier:cellid]autorelease];
    }
    //文本标签
    cell.textLabel.text=(NSString*)[list objectAtIndex:indexPath.row];
    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*)[list objectAtIndex:indexPath.row];
    //NSLog(@"textField.text=%@",textField.text);
    [

self
 setShowList:
NO
];
    }
    

-(
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 {
        [

super
 dealloc];
    }
    @end

转载自原文链接, 如需删除请联系管理员。

原文链接:iphone界面如何实现下拉列表,转载请注明来源!

0