下拉菜单

【下拉菜单】好久没更新,花了几个小时写了个下拉菜单

下拉菜单
文章图片
Simulator Screen Shot - iPhone XR - 2019-01-18 at 15.18.11.png
下拉菜单
文章图片
Simulator Screen Shot - iPhone 7 - 2019-01-18 at 15.19.38.png BoutiqueSelectedBtnView.h

#import #import "MenuTableView.h"NS_ASSUME_NONNULL_BEGIN /* 列表按钮选择 */typedef enum { AlertViewTypeNormol, AlertViewTypeDarck, }AlertViewType; @protocol BoutiqueSelectedBtnViewDelegate @optional - (void)BoutiqueSelectedBtnViewDelegateClick:(int)index; - (void)BSBViewDidSelectedCellAndIndex:(int)index; @end@interface BoutiqueSelectedBtnView : UIView @property (nonatomic, strong) NSArray *dataArray; @property (nonatomic, assign) idmyDelage; @property (nonatomic, strong) MenuTableView *menuView; @property (nonatomic, strong) NSMutableArray *menuViewArray; @property (nonatomic, assign) AlertViewType alertType; - (instancetype)initWithFrame:(CGRect)frame andBtnArray:(NSArray *)array andAlertType:(AlertViewType)alertType; - (void)setFond:(int)fond; - (void)changeButtonStatus:(int)index andStatus:(BOOL)status; @endNS_ASSUME_NONNULL_END

BoutiqueSelectedBtnView.m
// //BoutiqueSelectedBtnView.m //XinLiJianKangJiaoYu // //Created by 李文强 on 2018/12/18. //Copyright ? 2018 sijiaokeji. All rights reserved. //#import "BoutiqueSelectedBtnView.h" @implementation BoutiqueSelectedBtnView{ UIButton *currentBtn; }/* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ - (instancetype)initWithFrame:(CGRect)frame andBtnArray:(NSArray *)array andAlertType:(AlertViewType)alertType{ if ([super initWithFrame:frame]) { _dataArray = array; self.alertType = alertType; [self initSubView]; [self initOption]; [self layout]; } return self; } - (void)initOption{} - (void)initSubView{ for (int i=0; i<_dataArray.count; i++) { CGFloat W = [UIScreen mainScreen].bounds.size.width/_dataArray.count; UIButton *btn =[UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(i*W,0, W, self.frame.size.height); [btn setTitle:_dataArray[i] forState:UIControlStateNormal]; btn.tag = 100+i; btn .titleLabel.font = [UIFont systemFontOfSize:15]; [btn setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal]; [btn addTarget:self action:@selector(minClick:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:btn]; } //index :当前选择的那个Index __block BoutiqueSelectedBtnView *my_self = self; self.menuView.block = ^(int index) { my_self->currentBtn.selected = NO; [my_self.menuView removeFromSuperview]; [my_self.myDelage BSBViewDidSelectedCellAndIndex:index]; }; } - (void)layout{} - (void)setFond:(int)fond{ for (int i=0; i<_dataArray.count; i++) { UIButton *btn = (UIButton *)[self viewWithTag:100+i]; btn.titleLabel.font = [UIFont systemFontOfSize:fond]; } } - (void)minClick:(UIButton *)sender{ for (int i = 0; i<_dataArray.count; i++) { if (sender.tag == 100+i) { sender.selected = !sender.selected; currentBtn = sender; }else{ UIButton *btn = (UIButton *)[self viewWithTag:100+i]; btn.selected = NO; } } if (sender.selected == YES) { if (self.alertType == AlertViewTypeNormol) { //弹出白色的选择框 [_menuView removeFromSuperview]; [[UIApplication sharedApplication].keyWindow.rootViewController.view addSubview:self.menuView]; _menuView.frame = CGRectMake(0, self.frame.size.height+self.frame.origin.y, [UIScreen mainScreen].bounds.size.width, _menuViewArray.count*40+250); _menuView.backgroundColor = [UIColor whiteColor]; }else{ //弹出暗色的选择框 _menuView.backgroundColor = [UIColor darkGrayColor]; } }else{ [_menuView removeFromSuperview]; } [self.myDelage BoutiqueSelectedBtnViewDelegateClick:(int)sender.tag-100]; } - (void)setMenuViewArray:(NSMutableArray *)menuViewArray{ _menuView.menuArray = menuViewArray; _menuView.frame = CGRectMake(0, self.frame.size.height+self.frame.origin.y, [UIScreen mainScreen].bounds.size.width, menuViewArray.count*40); [_menuView reloadData]; } - (void)drawRect:(CGRect)rect{ UIBezierPath *path = [[UIBezierPath alloc]init]; [path moveToPoint:CGPointMake(0, 0)]; [path addLineToPoint:CGPointMake([UIScreen mainScreen].bounds.size.width, 0)]; [[UIColor lightGrayColor] setStroke]; [path stroke]; UIBezierPath *path1 = [[UIBezierPath alloc]init]; [path1 moveToPoint:CGPointMake(0, self.frame.size.height-2)]; [path1 addLineToPoint:CGPointMake([UIScreen mainScreen].bounds.size.width, self.frame.size.height-2)]; [[UIColor lightGrayColor] setStroke]; [path1 stroke]; } - (void)changeButtonStatus:(int)index andStatus:(BOOL)status{ UIButton *btn = (UIButton *)[self viewWithTag:100+index]; btn.selected = NO; } - (MenuTableView *)menuView{ if (!_menuView) { MenuTableView *view = [[MenuTableView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 250) style:UITableViewStyleGrouped]; view.frame = CGRectMake(0,0, [UIScreen mainScreen].bounds.size.width, 120); view.selected = NO; _menuView = view; } return _menuView; } @end

MenuTableView.h
#import NS_ASSUME_NONNULL_BEGIN typedef void(^MenuConfirmBlock)(int index); @interface MenuTableView : UITableView @property (nonatomic, strong) NSArray *menuArray; @property (nonatomic, strong) MenuConfirmBlock block; @property (nonatomic, assign) BOOL selected; @endNS_ASSUME_NONNULL_END

MenuTableView.m
// //MenuTableView.m //XinLiJianKangJiaoYu // //Created by 李文强 on 2018/12/13. //Copyright ? 2018 sijiaokeji. All rights reserved. //#import "MenuTableView.h"@implementation MenuTableView{ }/* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{ if ([super initWithFrame:frame style:style]) { [self initSubView]; [self initOption]; [self layout]; } return self; } - (void)initSubView{ } - (void)initOption{ [self registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"]; self.delegate = self; self.dataSource = self; } - (void)layout{} - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return _menuArray.count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 40; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return 0; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ UIView *view = [UIView new]; view.frame = CGRectMake(0, 0, 0, 0); return view; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; if (!cell) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; } cell.backgroundColor = [UIColor clearColor]; cell.textLabel.text = _menuArray[indexPath.row]; cell.textLabel.textAlignment = 1; if (self.backgroundColor == [UIColor darkGrayColor]) { cell.textLabel.textColor = [UIColor whiteColor]; }else{ cell.textLabel.textColor = [UIColor darkGrayColor]; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ self.block((int)indexPath.row); } @end

使用
#import "ViewController.h" #import "BoutiqueSelectedBtnView.h"@interface ViewController () @property (nonatomic, strong) BoutiqueSelectedBtnView *buttonView; @end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; // Do any additional setup after loading the view, typically from a nib. [self.view addSubview:self.buttonView]; } - (void)BSBViewDidSelectedCellAndIndex:(int)index{} - (void)BoutiqueSelectedBtnViewDelegateClick:(int)index{ switch (index) { case 0: { _buttonView.menuViewArray =[[NSMutableArray alloc] initWithArray:@[@"收费1",@"收费2",@"收费3",@"收费4"]]; } break; case 1: { _buttonView.menuViewArray =[[NSMutableArray alloc] initWithArray:@[@"收费1",@"收费2",@"收费3",@"收费4"]]; } break; case 2: { _buttonView.menuViewArray =[[NSMutableArray alloc] initWithArray:@[@"Type1",@"Type2",@"Type3",@"Type4"]]; } break; default: break; } } #pragma mark - ButtonView - (BoutiqueSelectedBtnView *)buttonView{ if (!_buttonView) { BoutiqueSelectedBtnView *btn = [[BoutiqueSelectedBtnView alloc]initWithFrame:CGRectMake(0,[UIApplication sharedApplication].statusBarFrame.size.height, [UIScreen mainScreen].bounds.size.width, 30) andBtnArray:@[@"年级",@"收费",@"类型"] andAlertType:AlertViewTypeNormol]; btn.myDelage = self; btn.backgroundColor = [UIColor whiteColor]; _buttonView = btn; } return _buttonView; }

    推荐阅读