iPhone界面如何實現下拉列表 – iPhone手機開發技術文章 iPhone軟體開發教學課程

代碼如下:
#import

@interface DropDownList : UIView {
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”
@implementationDropDownList
@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

發佈留言