CLDropDownMenuView 高度可定制的下拉菜單

CLDropDownMenuView

一個高度可定制的下拉菜單,效果如下:


下拉菜單效果圖.gif

Getting Started 【開始使用】

Features 【能做什么】

DropDownMenuView 是一個提供高度自定制的下拉菜單。所以你可以根據的你的需要設置以下值。

-  右邊距(rightMarign // 注意這個位置是相對于 - (void)addDropDownMenuToView:(UIView *)view要添加視圖的右邊距 默認是 15)
-  上邊距(topMarign;   // 同上  上邊距  默認是64;)
-  cell的樣式(dropDownType;  // 默認的是顯示文字和圖片)
-  寬度(viewWidth; // 默認是150.00 最小寬度是60.0f)
-  最大顯示行數(limitMaxCount; // 最多顯示多少行  默認是5行 如果設置的值<=0 或者 >= 10 那么就是默認值)
-  能否拖動(bounces; // 默認是 NO. 能否拖動 )
-  cell的高度(itemHeight;  // 每個單元格的高度 默認是50;最小高度35(避免圖片不能正常顯示);)
-  文字(textFont;  // 文字大小  默認14號系統字體)
-  文字顏色(textColor; // 文字顏色 默認0.25白色字體)
-  背景顏色(backgroundColor;   // 背景顏色 默認是白色)
-  是否可用(disableItemSelected;  // 不可用的狀態是否可以被點擊  默認是不可以)
-  不可用文字的大小(disableTextFont;  // 不可用的文字大小  默認14號系統字體)
-  不可用文字的顏色(disableTextColor;  //不可以文字顏色  默認0.88白色字體)
-  背景尖角的高度( pointedHeight;     // 背景圖片尖的高度  默認是9.0f  根據自己圖片尺寸進行調整)
-  背景的圓角(cornerRadius;   // 圓角半徑  默認是5.f;)

Installation 【安裝】

From CocoaPods【使用CocoaPods】

pod 'CLDropDownMenuView'

安裝成功后,引入頭文件#import <DropDownMenuView/CLDropDownMenuView.h>

Manually【手動導入】

github地址:CLDropDownMenuView
項目結構如下:

項目結構.png

直接將DropDownMenuView 文件到導入你的項目,導入頭文件#import "CLDropDownMenuView.h"即可。

Description 【描述】

圖層分解:

CLDropDownMenuView --> 遮罩層UIView(黑色背景:bgMaskView) --> UIImageView(下拉菜單的背景圖:bgImageView) --> UItableView(表格視圖:tableView) -->UITableViewCell(點擊的單元格)

可能用到的庫文件分析:

    CLDropDownMenuView:下拉菜單視圖類
    CLDropDownMenuValue:一些枚舉
    CLDropDownMenuDelegate:代理回調
    CLDropDownMenuInfo:  每個單元格的信息
    CLDropDownMenuConfig: 配置每個單元格的樣式

類中提供的的一些屬性和方法
CLDropDownMenuView:

// 背景圖片
@property (nonatomic, strong) UIImage *bgImage; 

// delegate
@property (nonatomic, weak) id<CLDropDownMenuDelegate> delegate;

//設置菜單數據
@property (nonatomic, strong) NSArray<CLDropDownMenuInfo *> *itemList; 

// 配置菜單信息
@property (nonatomic, strong) CLDropDownMenuConfig *menuConfig;  

// 是否顯示
@property (nonatomic, assign, readonly) BOOL isShow;  


// 視圖初始化
+ (instancetype)dropDownMenuView; 


// 添加視圖到某個視圖上
- (void)addDropDownMenuToView:(UIView *)view;  

//關閉下拉菜單  一般情況不用調用
- (void)dismissDropDownMenuView; 


// 刷新數據 也是顯示菜單方法
- (void)reloadData; 


// 自定義Item單元格的   可以根據自己的愛好 自己定義
- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier;
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier;
- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;


CLDropDownMenuValue:

typedef NS_ENUM(NSInteger, CLDropDownType) {
    
    CLDropDownTypeAll = 0,  // 有文字和圖片
    CLDropDownTypeOnlyTitle, // 只有文字
    CLDropDownTypeCustom    // 自定義item樣式
    
};

CLDropDownMenuDelegate:

@protocol CLDropDownMenuDelegate <NSObject>


@required;

/* 點擊了哪一行*/
- (void)dropDownMenuView:(CLDropDownMenuView *)dropDownMenuView didSelectIndex:(NSInteger)index;


@optional;
/* 視圖將要顯示 */
- (void)dropDownMenuViewWillShow:(CLDropDownMenuView *)dropDownMenuView;

/* 視圖將要消失 */
- (void)dropDownMenuViewWillDismiss:(CLDropDownMenuView *)dropDownMenuView;

/* 視圖已經顯示 */
- (void)dropDownMenuViewDidShow:(CLDropDownMenuView *)dropDownMenuView;

/* 視圖已經消失 */
- (void)dropDownMenuViewDidDismiss:(CLDropDownMenuView *)dropDownMenuView;


// 1.1.2  增加自定義item 
- (UITableViewCell *)dropDownMenuView:(CLDropDownMenuView *)dropDownMenuView cellForIndex:(NSInteger)index;

@end

CLDropDownMenuInfo:

// 圖片名字
@property (nonatomic, copy) NSString *imageName; 

// 標題
@property (nonatomic, copy) NSString *title;  

 //是不是不能用
@property (nonatomic, assign) BOOL disable; 


CLDropDownMenuConfig:

@property (nonatomic, assign) CGFloat rightMarign;  // 注意這個位置是相對于 - (void)addDropDownMenuToView:(UIView *)view要添加視圖的右邊距 默認是 15


@property (nonatomic, assign) CGFloat topMarign;   // 同上  上邊距  默認是64;


@property (nonatomic, assign) CLDropDownType dropDownType;  // 默認的是顯示文字和圖片


@property (nonatomic, assign) CGFloat viewWidth;  // 默認是150.00 最小寬度是60.0f


@property (nonatomic, assign) NSInteger limitMaxCount;  // 最多顯示多少行  默認是5行 如果設置的值<=0 或者 >= 10 那么就是默認值


@property (nonatomic, assign) BOOL bounces;  // 默認是 NO. 能否拖動 


@property (nonatomic, assign) CGFloat itemHeight;  // 每個單元格的高度 默認是50;最小高度35(避免圖片不能正常顯示);


@property (nonatomic, strong) UIFont *textFont;  // 文字大小  默認14號系統字體


@property (nonatomic, strong) UIColor *textColor; // 文字顏色 默認0.25白色字體


@property (nonatomic, strong) UIColor *backgroundColor;   // 背景顏色 默認是白色


@property (nonatomic, strong) UIFont *disableTextFont;  // 不可用的文字大小  默認14號系統字體


@property (nonatomic, strong) UIColor *disableTextColor;  //不可以文字顏色  默認0.88白色字體


@property (nonatomic, assign) CGFloat pointedHeight;     // 背景圖片尖的高度  默認是9.0f  根據自己圖片尺寸進行調整


@property (nonatomic, assign) BOOL disableItemSelected;  // 不可用的狀態是否可以被點擊  默認是不可以

@property (nonatomic, assign) CGFloat cornerRadius;   // 圓角半徑  默認是5.f;


Examples 【示例】

具體可參照github CLDropDownMenuViewExample


#import "ViewController.h"
#import "CLDropDownMenuView.h"
#import "CLTestTableViewCell.h"


@interface ViewController ()<CLDropDownMenuDelegate>

@property (nonatomic, strong) CLDropDownMenuView *dropDownMenuView;
@property (nonatomic, strong) CLDropDownMenuConfig *menuConfig;
@property (nonatomic, strong) NSMutableArray *itemsList;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.view.backgroundColor = [UIColor whiteColor];
    /********模擬數據*********/
    self.itemsList = [NSMutableArray new];
    for (int i = 0; i < 4; i++) {
        
        CLDropDownMenuInfo *info1 = [[CLDropDownMenuInfo alloc] init];
        info1.title = @"我是不能用的";
        info1.imageName = @"CameraIcon";
        info1.disable = arc4random()%2;
        [self.itemsList addObject:info1];
        
    }
    
    UIButton *btn = [[UIButton alloc] init];
    btn.frame = CGRectMake([UIScreen mainScreen].bounds.size.width - 100, 100, 80, 40);
    [btn setTitle:@"請點擊我" forState:UIControlStateNormal];
    [self.view addSubview:btn];
    [btn addTarget:self action:@selector(showMenu) forControlEvents:UIControlEventTouchUpInside];
    btn.backgroundColor =  [UIColor colorWithRed:81/255.0 green:158/255.0 blue:138/255.0 alpha:0.9];
    btn.layer.cornerRadius = 5;
    btn.titleLabel.font = [UIFont systemFontOfSize:14];
    
    
}

- (void) showMenu {
     [self.dropDownMenuView reloadData];
}


// 創建下拉菜單視圖
- (CLDropDownMenuView *)dropDownMenuView {
    
    if (!_dropDownMenuView) {
        _dropDownMenuView = [CLDropDownMenuView dropDownMenuView];
        _dropDownMenuView.delegate = self;
        _dropDownMenuView.menuConfig = self.menuConfig;
        _dropDownMenuView.itemList = self.itemsList;
//        [_dropDownMenuView registerNib:[UINib nibWithNibName:@"CLTestTableViewCell" bundle:nil] forCellReuseIdentifier:@"CLTestTableViewCell"];
        [_dropDownMenuView addDropDownMenuToView:[UIApplication sharedApplication].keyWindow];
    }
    return _dropDownMenuView;
}

// 根據項目需要可以自己定制樣式
- (CLDropDownMenuConfig *)menuConfig {
    
    if (!_menuConfig) {
        
        _menuConfig = [[CLDropDownMenuConfig alloc] init];
        _menuConfig.rightMarign = 20;
        _menuConfig.topMarign = 145;
//        _menuConfig.dropDownType = CLDropDownTypeCustom;
//        _menuConfig.viewWidth = 150;
//        _menuConfig.itemHeight = 44;
//        _menuConfig.limitMaxCount = 5;
//        _menuConfig.pointedHeight = 15;
////        _menuConfig.cornerRadius = 15;
//        _menuConfig.backgroundColor = [UIColor redColor];
//        _menuConfig.disableItemSelected = YES;
    }
    return _menuConfig;
}


#pragma mark --
#pragma mark --  CLDropDownMenuDelegate

- (void)dropDownMenuView:(CLDropDownMenuView *)dropDownMenuView didSelectIndex:(NSInteger)index {
    
    NSLog(@"我點擊了第%ld行",index);
    
}

- (void)dropDownMenuViewDidDismiss:(CLDropDownMenuView *)dropDownMenuView {
    
    if (self.dropDownMenuView == dropDownMenuView) {
        NSLog(@"視圖已經消失");
    }
    
}


/* 視圖將要顯示 */
- (void)dropDownMenuViewWillShow:(CLDropDownMenuView *)dropDownMenuView {
    if (self.dropDownMenuView == dropDownMenuView) {
        NSLog(@"視圖將要顯示");
    }
}

/* 視圖將要消失 */
- (void)dropDownMenuViewWillDismiss:(CLDropDownMenuView *)dropDownMenuView {
    if (self.dropDownMenuView == dropDownMenuView) {
        NSLog(@"視圖將要消失");
    }
}

/* 視圖已經顯示 */
- (void)dropDownMenuViewDidShow:(CLDropDownMenuView *)dropDownMenuView {
    if (self.dropDownMenuView == dropDownMenuView) {
        NSLog(@"視圖已經顯示");
    }
}



//// 自定義cell樣式 需要設置_menuConfig.dropDownType = CLDropDownTypeCustom;
//- (UITableViewCell *)dropDownMenuView:(CLDropDownMenuView *)dropDownMenuView cellForIndex:(NSInteger)index {
//
//    CLTestTableViewCell *cell = [dropDownMenuView dequeueReusableCellWithIdentifier:@"CLTestTableViewCell"];
//
//    CLDropDownMenuInfo *info = self.itemsList[index];
//
//    cell.label.text = info.title;
//
//    return cell;
//
//}


Q:這么寫不是太麻煩了嗎?
A:為了適用于更多的項目,CLDropDownMenuView提供了大量的可設置的屬性以及方法。所以你可以根據項目需要,在CLDropDownMenuView的基礎上封裝適合自己項目的菜單視圖。

Expectation【期待】

如果在使用過程中遇到BUG,希望你能Issues我,謝謝(或者嘗試下載最新的框架代碼看看BUG修復沒有)
如果在使用過程中發現功能不夠用,希望你能Issues我,我非常想為這個框架增加更多好用的功能,謝謝

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網絡請求組件 FMDB本地數據庫組件 SD...
    陽明先生_X自主閱讀 16,000評論 3 119
  • 社會發展到一定階段出現了分工,每個成員在團隊里各自貢獻技能,一起實現團隊目標。互聯網技術的出現,使得通過設計開發互...
    鄒志楠閱讀 12,768評論 12 31
  • 【我走了,你自己要乖乖的,要照顧好自己,要聽潘姐和蔡姐的話。】此刻的kimi正站在機場大廳里對璐璐說道。 【好的你...
    石思琳閱讀 426評論 0 5