ios 下拉菜单Menu
看了很多的demo,看到思路大致相同。手动模仿写一个。
DropdownMenu.h
#import <UIKit/UIKit.h>
@class DropdownMenu;
@protocol LHDropdownMenuDelegate <NSObject>
@optional
// 当选择某个选项时调用
- (void)dropdownMenu:(DropdownMenu *)menu didSelectOptionAtIndex:(NSUInteger)index optionTitle:(NSString *)title;
// 当下拉菜单将要显示时调用
- (void)dropdownMenuWillShow:(DropdownMenu *)menu;
// 当下拉菜单已经显示时调用
- (void)dropdownMenuDidShow:(DropdownMenu *)menu;
// 当下拉菜单将要收起时调用
- (void)dropdownMenuWillHidden:(DropdownMenu *)menu;
// 当下拉菜单已经收起时调用
- (void)dropdownMenuDidHidden:(DropdownMenu *)menu;
@end
@protocol DropdownMenuDataSource <NSObject>
@required
/*
list的内容代理
*/
- (NSUInteger)numberOfOptionsInDropdownMenu:(DropdownMenu *)menu;
- (CGFloat)dropdownMenu:(DropdownMenu *)menu heightForOptionAtIndex:(NSUInteger)index;
- (NSString *)dropdownMenu:(DropdownMenu *)menu titleForOptionAtIndex:(NSUInteger)index;
@optional
- (UIImage *)dropdownMenu:(DropdownMenu *)menu iconForOptionAtIndex:(NSUInteger)index;
@end
@interface DropdownMenu : UIView<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, weak) id <DropdownMenuDataSource> dataSource;
@property (nonatomic, weak) id <LHDropdownMenuDelegate> delegate;
/*
Menu标题
*/
//标题
@property (nonatomic,copy) NSString * title;
//背景色
@property (nonatomic,strong) UIColor * titleBgColor;
//字体大小
@property (nonatomic,strong) UIFont * titleFont;
//字体颜色
@property (nonatomic,strong) UIColor * titleColor;
//文本的Alignment
@property (nonatomic) NSTextAlignment titleAlignment;
@property (nonatomic) UIEdgeInsets titleEdgeInsets;
//图标
@property (nonatomic,strong) UIImage * rotateIcon;
//图标大小
@property (nonatomic,assign) CGSize rotateIconSize;
//
@property (nonatomic,assign) CGFloat rotateIconMarginRight; // default: 7.5
//图标的颜色
@property (nonatomic,strong) UIColor * rotateIconTint;
/*
-------list
*/
//列表的颜色
@property (nonatomic,strong) UIColor * optionBgColor;
//列表文本的大小
@property (nonatomic,strong) UIFont * listOptionFont;
//列表文本的颜色
@property (nonatomic,strong) UIColor * listOptionTextColor;
//列表文本的Alignment
@property (nonatomic) NSTextAlignment listOptionTextAlignment;
//列表文本的每行显示
@property (nonatomic) NSInteger listOptionNumberOfLines;
//列表的图标 default:(15,15)
@property (nonatomic,assign) CGSize listOptionIconSize;
//列表图标右边距 default: 15
@property (nonatomic,assign) CGFloat listOptionIconMarginRight;
//列表分割线的显色 default: white
@property (nonatomic,strong) UIColor * listOptionLineColor;
//列表分割线导读 default: 0.5
@property (nonatomic,assign) CGFloat listOptionLineHeight;
/*
选项列表的最大高度。超出最大高度后,选项可滚动 (optionsListLimitHeight <= 0 时,下拉列表将显示所有选项)
*/
@property (nonatomic,assign) CGFloat optionsListLimitHeight; // default: 0
@property (nonatomic,assign) BOOL showsVerticalScrollIndicatorOfOptionsList; // default: YES
// 下拉动画时间 default: 0.25
@property (nonatomic,assign) CGFloat animateTime;
- (void)reloadOptionsData;
- (void)showDropDown; // 下拉菜单显示
- (void)hideDropDown; // 下拉菜单隐藏
@end
DropdownMenu.m
#import "DropdownMenu.h"
@interface DropdownMenu() <UIGestureRecognizerDelegate>
@property (nonatomic, strong) UIButton *mainBtn; // 菜单按钮
@property (nonatomic, strong) UIImageView * arrowMark; // 尖头图标
@property (nonatomic, strong) UITableView *optionsList; // 下拉列表
@property (nonatomic, strong) UIView *floatView;
@property (nonatomic, strong) UIView *coverView;
@end
@implementation DropdownMenu
{
BOOL _isOpened;
}
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
[self initProperties];
[self initViews];
[self initFrame:self.frame];
}
return self;
}
- (void)awakeFromNib {
[super awakeFromNib];