zoukankan      html  css  js  c++  java
  • 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(
    00,
        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

  • 相关阅读:
    Python基础-字符串方法 、文件操作
    Python基础-列表、字典
    Python基础作业-用户登录
    LeetCode 78. Subsets
    LeetCode 77. Combinations
    LeetCode 76. Minimum Window Substring
    LeetCode 74. Search a 2D Matrix
    LeetCode 73. Set Matrix Zeroes
    LightOJ 1043
    LightOJ 1042
  • 原文地址:https://www.cnblogs.com/Cristen/p/2849627.html
Copyright © 2011-2022 走看看