zoukankan      html  css  js  c++  java
  • iphone实现下拉列表(iOS开发 )

    iphone实现下拉列表(iOS开发 )

    #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];//调用方法,绘制控件

    }

    return self;

    }

    -(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

    iphone实现下拉列表(iOS开发 )

  • 相关阅读:
    WPF DataGrid根据内容设置行颜色
    wpf: DataGridTextColumn 数字格式显示,编辑时取消格式(StringFormat)
    关于wpf,datagrid,双向数据绑定用法解决方案
    AddTransient、AddSingleton、AddScoped 三者都应该在什么场景下使用
    Fetch API 使用 fatch 函数调用 .netcore WebApi接口报错:Failed to fetch
    ASP.NET Core 中使用Session会话
    利用 Google Chart API 生成二维码大小不一致
    Razor Page 文件
    asp.net core 的 razor pages 如何使用ajax调用后台方法
    asp.net core 发布到iis session无法传递的问题
  • 原文地址:https://www.cnblogs.com/hopeanCom/p/2773091.html
Copyright © 2011-2022 走看看