1. 程式人生 > >iOS點選下拉選單的實現(利用UITableView + UIButton + UILabel)

iOS點選下拉選單的實現(利用UITableView + UIButton + UILabel)

我們在學習的過程中,可能會遇到需要新增下拉選單功能的時候,有的小夥伴可能一時半會想不出來怎樣實現,那麼我今天就來給大家分享一下我的方法

先看一下效果圖

左邊是一個UIButton,點選前是如下效果

這裡寫圖片描述

這是點選星期三後的效果

這裡寫圖片描述

這樣,就實現了點選下拉選單的實現

我說一下原理

1.先設定一下tableView的尺寸,然後在它旁邊新增一個按鈕,在按鈕被點選後,將tableView的高度設定為0,這樣就實現了下拉選單的隱藏。
2.將label的text先設為空,在點選cell之後,將label的text設定為當前cell的text,並且將下拉選單收回(將tableView的高度設定為0)。在點選按鈕之後,將高度又變為為原來的高度,這樣就會回彈出來。

是不是很簡單呢?

下面分享一下程式碼

ViewController.m

#import "ViewController.h"

@interface ViewController ()
<UITableViewDelegate, UITableViewDataSource>

@property(nonatomic, copy)NSArray *dataArray;
@property(nonatomic, strong)UIButton *button;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super
viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _dataArray = @[@"星期一", @"星期二", @"星期三", @"星期四", @"星期五", @"星期六", @"星期日"]; _tableView = [[UITableView alloc] initWithFrame:CGRectMake(100, 130, 130, 120) style:UITableViewStylePlain]; _tableView.delegate = self
; _tableView.dataSource = self; [self.view addSubview:_tableView]; _button = [UIButton buttonWithType:UIButtonTypeCustom]; _button.frame = CGRectMake(70, 100, 30, 30); _button.backgroundColor = [UIColor yellowColor]; [_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_button setTitleColor:[UIColor blackColor] forState:UIControlStateSelected]; [_button setTitle:@"收" forState:UIControlStateNormal]; [_button setTitle:@"彈" forState:UIControlStateSelected]; [_button addTarget:self action:@selector(clickToPush:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_button]; _selectLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 130, 30)]; _selectLabel.text = @" "; [_selectLabel.layer setCornerRadius:0]; [_selectLabel.layer setBorderWidth:1]; [_selectLabel.layer setBorderColor:[UIColor blackColor].CGColor]; [self.view addSubview:_selectLabel]; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 30; } - (void)clickToPush:(UIButton *)btn { btn.selected = !btn.selected; if (btn.selected == YES) { _tableView.frame = CGRectMake(100, 130, 130, 0); } else { _tableView.frame = CGRectMake(100, 130, 130, 120); } } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [_dataArray count]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 1; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { _selectLabel.text = _dataArray[indexPath.section]; _tableView.frame = CGRectMake(100, 130, 130, 0); _button.selected = !_button.selected; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"ID"]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ID"]; } cell.backgroundColor = [UIColor orangeColor]; cell.textLabel.font = [UIFont systemFontOfSize:12]; cell.textLabel.text = _dataArray[indexPath.section]; cell.selectionStyle = UITableViewCellSelectionStyleNone; return cell; } @end