【下拉菜单】好久没更新,花了几个小时写了个下拉菜单
文章图片
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;
}