ios 中没有下拉组件,下面是自己实现的分享给大家!
运行效果图:
[img]
[img]http://dl.iteye.com/upload/attachment/0078/8001/624cb9b2-eb75-306e-a042-9267b9d033af.jpg[/img]
[/img]
实现:
运行效果图:
[img]
[img]http://dl.iteye.com/upload/attachment/0078/8001/624cb9b2-eb75-306e-a042-9267b9d033af.jpg[/img]
[/img]
#import <UIKit/UIKit.h>
@protocol CloComboxDelegate;
@interface CloCombox : UIView <UITableViewDataSource, UITableViewDelegate>{
UIButton *title;
UITableView *cloTable;
}
@property (nonatomic, retain) id <CloComboxDelegate> delegate;
@property (nonatomic, retain) NSArray *tableItems;
- (void)setTitle:(NSString *)titleStr;
- (id)initWithFrame:(CGRect)frame items:(NSArray *)items inView:(UIView *)view;
@end
@protocol CloComboxDelegate <NSObject>
- (void)itemDidSelected:(NSInteger)index;
@end
实现:
#import "CloCombox.h"
@implementation CloCombox
@synthesize delegate, tableItems;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (id)initWithFrame:(CGRect)frame items:(NSArray *)items inView:(UIView *)view{
self = [self initWithFrame:frame];
self.tableItems = items;
title = [UIButton buttonWithType:UIButtonTypeCustom];
[title setFrame:CGRectMake(0, 0, frame.size.width, 25)];
[title setTitle:@"未选择" forState:UIControlStateNormal];
[title setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[title addTarget:self action:@selector(titleBtnDidTaped:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:title];
cloTable = [[UITableView alloc] initWithFrame:CGRectMake((view.frame.size.width - frame.size.width)/2, 0, frame.size.width, 30*items.count) style:UITableViewStylePlain];
cloTable.delegate = self;
cloTable.dataSource = self;
cloTable.hidden = YES;
[view addSubview:cloTable];
return self;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
- (void)setTitle:(NSString *)titleStr{
[title setTitle:titleStr forState:UIControlStateNormal];
}
- (IBAction)titleBtnDidTaped:(id)sender{
cloTable.hidden = !cloTable.hidden;
}
- (void)dealloc{
[super dealloc];
[title release];
[cloTable release];
}
#pragma mark-
#pragma table view datasource
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 30;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return tableItems.count;
}
- (UITableViewCell* )tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier = @"CELLIDENTIFIER";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
//if sdk version is below 6.0 instead by UITextAlignmentCenter
[cell.textLabel setTextAlignment:NSTextAlignmentCenter];
}
cell.textLabel.text = [tableItems objectAtIndex:indexPath.row];
return cell;
}
#pragma mark -
#pragma mark tableview delegate methods
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[self setTitle:[tableItems objectAtIndex:indexPath.row]];
tableView.hidden = YES;
if ([delegate respondsToSelector:@selector(itemDidSelected:)]) {
[delegate itemDidSelected:indexPath.row];
}
}
@end