iOS study Day18-下拉列表框

参照网上相关案例,对下拉列表框加以改进,现用一条语句即可产生下拉列表框

    _age = [[Dropdown alloc] initWithView:self.view pos:50 :50 wid:140 :100 obj:@"男性",@"女性",@"中性",@"其他",@"非人类", nil];

具体类文件如下:

接口文件

#import <Foundation/Foundation.h>

@interface Dropdown : 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;



-(id)initWithView:(UIView*)view :(int)x :(int)y :(int)width :(int)height obj:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;

@end



实现文件

//
//  Dropdown.m
//  0411twoscreen
//
//  Created by 王 健 on 14-4-11.
//  Copyright (c) 2014年 WJ. All rights reserved.
//

#import "Dropdown.h"
@implementation Dropdown


@synthesize tv,tableArray,textField;


- (void)dealloc

{
    
    [tv release];
    [tableArray release];
    [textField release];
    [super dealloc];
    
}

-(id)initWithView:(UIView*)view pos:(int)x :(int)y wid:(int)width :(int)height obj:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION
{
    if (height<200) {
        frameHeight = 200;
    }else{
        frameHeight = height;
    }
    tabheight = frameHeight-30;
    height = 30.0f;
    self=[super initWithFrame:CGRectMake(x, y, width, height)];
    showList = NO; //默认不显示下拉框
    tv = [[UITableView alloc] initWithFrame:CGRectMake(0, 30, width, 0)];
    tv.delegate = self;
    tv.dataSource = self;
    tv.backgroundColor = [UIColor grayColor];
    tv.separatorColor = [UIColor lightGrayColor];
    tv.hidden = YES;
    [self addSubview:tv];
    textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, width, 30)];
    textField.borderStyle=UITextBorderStyleRoundedRect;//设置文本框的边框风格
    [textField addTarget:self action:@selector(dropdown) forControlEvents:UIControlEventAllTouchEvents];
    [self addSubview:textField];
    NSMutableArray *arr = [NSMutableArray array];
    va_list args;
    va_start(args, firstObj); // scan for arguments after firstObject.
    // get rest of the objects until nil is found
    for (NSObject *str = firstObj; str != nil; str = va_arg(args,NSString*)) {
        [arr addObject:str];
    }
    va_end(args);
    self.tableArray = arr;
    self.textField.placeholder = @"请输入联系方式";
    NSLog(@"%@",arr);
    [view addSubview:self];
    return self;
}

-(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 = [UIColor grayColor];
        
        tv.separatorColor = [UIColor lightGrayColor];
        
        tv.hidden = YES;
        
        [self addSubview:tv];
        
        
        textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 30)];
        
        textField.borderStyle=UITextBorderStyleRoundedRect;//设置文本框的边框风格
        
        [textField addTarget:self action:@selector(dropdown) forControlEvents:UIControlEventAllTouchEvents];
        
        [self addSubview:textField];
        
        
        
    }
    
    return self;
    
}

-(void)dropdown{
    
    [textField resignFirstResponder];
    
    if (showList) {//如果下拉框已显示,什么都不做
        
        return;
        
    }else {//如果下拉框尚未显示,则进行显示
        
        
        
        CGRect sf = self.frame;
        
        sf.size.height = frameHeight;
        
        
        
        //把dropdownList放到前面,防止下拉框被别的控件遮住
        
        [self.superview bringSubviewToFront:self];
        
        tv.hidden = NO;
        
        showList = YES;//显示下拉框
        
        
        
        CGRect frame = tv.frame;
        
        frame.size.height = 0;
        
        tv.frame = frame;
        
        frame.size.height = tabheight;
        
        [UIView beginAnimations:@"ResizeForKeyBoard" context:nil];
        
        [UIView setAnimationCurve:UIViewAnimationCurveLinear];
        
        self.frame = sf;
        
        tv.frame = frame;
        
        [UIView commitAnimations];
        
    }
    
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{
    
    return 1;
    
}


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

{
    
    return [tableArray count];
    
}


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

{
    
    static NSString *CellIdentifier = @"Cell";
    
    
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if (cell == nil) {
        
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        
    }
    
    
    
    cell.textLabel.text = [tableArray objectAtIndex:[indexPath row]];
    
    cell.textLabel.font = [UIFont systemFontOfSize: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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值