IOS使用UItableView实现下拉菜单组件(UITableView的使用方法)

本文介绍了如何在iOS应用中使用UITableView创建一个下拉菜单组件。通过在UIViewController中添加一个按钮,点击按钮展示UITableView形式的菜单。菜单内容通过UITableView的section和row动态显示和隐藏。同时实现了点击选择cell时更新显示框中的账号信息。
摘要由CSDN通过智能技术生成

一. 基础版本


在登陆界面有时需要保存已经登陆的账号信息,可以点开一个下拉菜单选择保存的账号,这里是用UIKit的表格组件编写一个下拉菜单组件demo,实现思路如下:


1.首先在一个UIViewController里放一个按钮或者标签框,用来显示当前选中的账号,右边放一个打开下拉菜单的小按钮,点击按钮时打开菜单,菜单是一个UITableView,设置好显示框后,将UITableViewController作为当前UIViewController的childviewcontroller,将表格视图作为当前根视图的子视图,尺寸根据显示框调整;


2.然后是菜单的显示和隐藏,将UITableView的背景设置为透明,去掉多余的表格分割线,使用表格的一个section的多个row来显示已有账号,隐藏菜单时返回row的数量为0这样刷新表格后会不显示,当显示菜单时,返回row的数量为数据源数组的长度然后reload表格即可;


3.最后要实现点击选中表格中的cell时将对应账号显示在显示框中,作为当前选中的账号,方法是在表格类内定义代理事件,并在跟视图中实现代理传入选中的cell的index将选中的账号更新显示在显示框内。


     


跟视图代码:

[objc]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  AccountSelectViewController.h  
  3. //  JXHDemo  
  4. //  
  5. //  Created by Xinhou Jiang on 6/7/16.  
  6. //  Copyright © 2016 Jiangxh. All rights reserved.  
  7. //  
  8.   
  9. #import <UIKit/UIKit.h>  
  10.   
  11. @interface AccountSelectViewController : UIViewController  
  12.   
  13. @end  

[objc]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  AccountSelectViewController.m  
  3. //  JXHDemo  
  4. //  
  5. //  Created by Xinhou Jiang on 6/7/16.  
  6. //  Copyright © 2016 Jiangxh. All rights reserved.  
  7. //  
  8. #define inputW 250 // 选择框宽度  
  9. #import "AccountSelectViewController.h"  
  10. #import "AccountTableViewController.h"  
  11.   
  12. @interface AccountSelectViewController ()<AccountDelegate>  
  13.   
  14. /** 
  15.  * 账号数据 
  16.  */  
  17. @property (nonatomicNSArray *dataSource;  
  18.   
  19. /** 
  20.  * 当前账号选择框 
  21.  */  
  22. @property (nonatomiccopyUIButton *curAccount;  
  23.   
  24. /** 
  25.  *  账号下拉列表 
  26.  */  
  27. @property (nonatomic)AccountTableViewController *accountList;  
  28.   
  29. @end  
  30.   
  31. @implementation AccountSelectViewController  
  32.   
  33. - (void)viewDidLoad {  
  34.     [super viewDidLoad];  
  35.       
  36.     // 1.请求账号数据  
  37.     [self request];  
  38.       
  39.     // 2.设置账号弹出菜单  
  40.     _accountList = [[AccountTableViewController alloc] init];  
  41.     // 数据传给下拉列表类,作为表格的数据源  
  42.     _accountList.accountSource = _dataSource;  
  43.     // 设置弹出菜单的代理为当前这个类  
  44.     _accountList.delegate = self;  
  45.     // 将下拉列表作为子页面添加到当前视图,同时添加子控制器  
  46.     [self addChildViewController:_accountList];  
  47.     [self.view addSubview:_accountList.view];  
  48.       
  49.     // 3.当前账号选择框(这里用一个按钮实现)  
  50.     _curAccount = [[UIButton alloc]initWithFrame:CGRectMake(2010025040)];  
  51.     // 默认当前账号为已有账号的第一个  
  52.     [_curAccount setTitle:[_dataSource objectAtIndex:0] forState:UIControlStateNormal];  
  53.     // 字体颜色  
  54.     [_curAccount setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];  
  55.     // 边框  
  56.     _curAccount.layer.borderWidth = 1.0;  
  57.     // 圆角  
  58.     _curAccount.layer.cornerRadius = 3.0;  
  59.     // 显示框背景色  
  60.     [_curAccount setBackgroundColor:[UIColor whiteColor]];  
  61.     // 根据显示框尺寸设置弹出菜单的位置和尺寸  
  62.     _accountList.view.frame = CGRectMake(_curAccount.frame.origin.x, _curAccount.frame.origin.y+_curAccount.frame.size.height, _curAccount.frame.size.width200);  
  63.     [self.view addSubview:_curAccount];  
  64.     // 下拉菜单弹出按钮  
  65.     UIButton *openBtn = [[UIButton alloc]initWithFrame:CGRectMake(inputW-30102020)];  
  66.     [openBtn setImage:[UIImage imageNamed:@"down_arrow"] forState:UIControlStateNormal];  
  67.     [openBtn addTarget:self action:@selector(openAccountList) forControlEvents:UIControlEventTouchUpInside];  
  68.     [_curAccount addSubview:openBtn];  
  69. }  
  70.   
  71. /** 
  72.  * 请求数据 
  73.  */  
  74. - (void)request {  
  75.     _dataSource = [[NSArray alloc]initWithObjects:@"919575700@qq.com"@"123435@qq.com"@"476guh@outlook.com"@"gvb84t48@163.com", nil nil];  
  76. }  
  77.   
  78. /** 
  79.  * 弹出账号选择列表 
  80.  */  
  81. - (void)openAccountList {  
  82.     _accountList.isOpen = !_accountList.isOpen;  
  83.     [_accountList.tableView reloadData];  
  84. }  
  85.   
  86. /** 
  87.  * 选定cell获取选中账号的代理监听 
  88.  */  
  89. - (void)selectedCell:(NSInteger)index {  
  90.     // 更新当前选中账号  
  91.     [_curAccount setTitle:[_dataSource objectAtIndex:index] forState:UIControlStateNormal];  
  92. }  
  93.   
  94. @end  

表格子视图代码:

[objc]  view plain   copy
  print ?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值