读书人

ios学习-iphone 兑现下拉菜单

发布时间: 2013-07-08 14:13:00 作者: rapoo

ios学习--iphone 实现下拉菜单

http://blog.163.com/ytrtfhj@126/blog/static/8905310920116224445195/

?

通过网上资料,自己借助资料写的代码,这是完全代码


//****************************************************************************


@interface DropDown1 : UIView <UITableViewDelegate,UITableViewDataSource> {

? ? UITableView *tv;//下拉列表

? ? NSArray *tableArray;//下拉列表数据

? ? UITextField *textField;//文本输入框

? ? BOOL showList;//是否弹出下拉列表

? ? CGFloat tabheight;//table下拉列表的高度

? ? CGFloat frameHeight;//frame的高度

}

?

@property (nonatomic,retain) UITableView *tv;

@property (nonatomic,retain) NSArray *tableArray;

@property (nonatomic,retain) UITextField *textField;

?

@end

?

//****************************************************************************


?

@implementation DropDown1

?

@synthesize tv,tableArray,textField;

?

- (void)dealloc

{

? ? [tv release];

? ? [tableArrayrelease];

? ? [textFieldrelease];

? ? [super dealloc];

}

?

-(id)initWithFrame:(CGRect)frame

{

? ? if (frame.size.height<200) {

? ? ? ? frameHeight = 200;

? ? }else{

? ? ? ? frameHeight = frame.size.height;

? ? }

? ? tabheight = frameHeight-30;

?? ?

? ? frame.size.height = 30.0f;

?? ?

? ? self=[super initWithFrame:frame];

?

? ? if(self){

? ? ? ? showList = NO; //默认不显示下拉框

?? ? ? ?

? ? ? ? tv = [[UITableView alloc] initWithFrame:CGRectMake(0, 30, frame.size.width, 0)];?

? ? ? ? tv.delegate = self;

? ? ? ? tv.dataSource = self; ?

? ? ? ? tv.backgroundColor = [UIColorgrayColor]; ?

? ? ? ? tv.separatorColor = [UIColorlightGrayColor]; ?

? ? ? ? tv.hidden = YES; ?

? ? ? ? [self addSubview:tv]; ?

?

? ? ? ? textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 30)];

? ? ? ? textField.borderStyle=UITextBorderStyleRoundedRect;//设置文本框的边框风格

? ? ? ? [textFieldaddTarget:selfaction:@selector(dropdown) forControlEvents:UIControlEventAllTouchEvents];

? ? ? ? [self addSubview:textField];

?? ? ? ?

? ? }

? ? returnself;

}

-(void)dropdown{

? ? [textFieldresignFirstResponder];

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

? ? ? ? return;

? ? }else {//如果下拉框尚未显示,则进行显示

?? ? ? ?

? ? ? ? CGRect sf = self.frame;

? ? ? ? sf.size.height = frameHeight;

?? ? ? ?

? ? ? ? //把dropdownList放到前面,防止下拉框被别的控件遮住

? ? ? ? [self.superviewbringSubviewToFront:self];

? ? ? ? tv.hidden = NO;

? ? ? ? showList = YES;//显示下拉框

?? ? ? ?

? ? ? ? CGRect frame = tv.frame;

? ? ? ? frame.size.height = 0;

? ? ? ? tv.frame = frame;

? ? ? ? frame.size.height = tabheight;

? ? ? ? [UIViewbeginAnimations:@"ResizeForKeyBoard"context:nil];?

? ? ? ? [UIViewsetAnimationCurve:UIViewAnimationCurveLinear]; ?

? ? ? ? self.frame = sf;

? ? ? ? tv.frame = frame;

? ? ? ? [UIViewcommitAnimations];

? ? }

}

?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

? ? return 1;

}

?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

? ? return [tableArraycount];

}

?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

? ? static NSString *CellIdentifier = @"Cell";

?? ?

? ? UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

? ? if (cell == nil) {

? ? ? ? cell = [[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier] autorelease];

? ? }

?? ?

? ? cell.textLabel.text = [tableArray objectAtIndex:[indexPath row]];

? ? cell.textLabel.font = [UIFontsystemFontOfSize:16.0f];

? ? cell.accessoryType = UITableViewCellAccessoryNone;

? ? cell.selectionStyle = UITableViewCellSelectionStyleGray;

?? ?

? ? return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

? ? return 35;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

? ? textField.text = [tableArray objectAtIndex:[indexPath row]];

? ? showList = NO;

? ? tv.hidden = YES;

?? ?

????CGRect sf = self.frame;
??? sf.size.height = 30;
??? self.frame = sf;

??? CGRect frame = tv.frame;
??? frame.size.height = 0;
??? tv.frame = frame;

}

?

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

? ? // Return YES for supported orientations

? ? return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

?

@end

?

//****************************************************************************


上面的是实现方法,下面是使用:

?

?DropDown1 *dd1 = [[DropDown1alloc] initWithFrame:CGRectMake(10, 10, 140, 100)];

?dd1.textField.placeholder = @"请输入联系方式";

?NSArray* arr=[[NSArrayalloc]initWithObjects:@"电话",@"email",@"手机",@"aaa",@"bbb",@"ccc",nil];

?dd1.tableArray = arr;

?[arr release];

?[self.view addSubview:dd1];

?[dd1 release];

?

读书人网 >操作系统

热点推荐