ios 下拉菜单Menu

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];
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值