CLDropDownMenuView 高度可定制的下拉菜單

CLDropDownMenuView

一個(gè)高度可定制的下拉菜單革骨,效果如下:


下拉菜單效果圖.gif

Getting Started 【開始使用】

Features 【能做什么】

DropDownMenuView 是一個(gè)提供高度自定制的下拉菜單讥蔽。所以你可以根據(jù)的你的需要設(shè)置以下值。

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

Installation 【安裝】

From CocoaPods【使用CocoaPods】

pod 'CLDropDownMenuView'

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

Manually【手動(dòng)導(dǎo)入】

github地址:CLDropDownMenuView
項(xiàng)目結(jié)構(gòu)如下:

項(xiàng)目結(jié)構(gòu).png

直接將DropDownMenuView 文件到導(dǎo)入你的項(xiàng)目虐块,導(dǎo)入頭文件#import "CLDropDownMenuView.h"即可。

Description 【描述】

圖層分解:

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

可能用到的庫文件分析:

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

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

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

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

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

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

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


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


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

//關(guān)閉下拉菜單  一般情況不用調(diào)用
- (void)dismissDropDownMenuView; 


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


// 自定義Item單元格的   可以根據(jù)自己的愛好 自己定義
- (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;

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


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

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

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

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


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

@end

CLDropDownMenuInfo:

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

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

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


CLDropDownMenuConfig:

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


@property (nonatomic, assign) CGFloat topMarign;   // 同上  上邊距  默認(rèn)是64嘉蕾;


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


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


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


@property (nonatomic, assign) BOOL bounces;  // 默認(rèn)是 NO. 能否拖動(dòng) 


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


@property (nonatomic, strong) UIFont *textFont;  // 文字大小  默認(rèn)14號系統(tǒng)字體


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


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


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


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


@property (nonatomic, assign) CGFloat pointedHeight;     // 背景圖片尖的高度  默認(rèn)是9.0f  根據(jù)自己圖片尺寸進(jìn)行調(diào)整


@property (nonatomic, assign) BOOL disableItemSelected;  // 不可用的狀態(tài)是否可以被點(diǎn)擊  默認(rèn)是不可以

@property (nonatomic, assign) CGFloat cornerRadius;   // 圓角半徑  默認(rèn)是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];
    /********模擬數(shù)據(jù)*********/
    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:@"請點(diǎn)擊我" 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];
}


// 創(chuàng)建下拉菜單視圖
- (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;
}

// 根據(jù)項(xiàng)目需要可以自己定制樣式
- (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(@"我點(diǎn)擊了第%ld行",index);
    
}

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


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

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

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



//// 自定義cell樣式 需要設(shè)置_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:為了適用于更多的項(xiàng)目儡率,CLDropDownMenuView提供了大量的可設(shè)置的屬性以及方法。所以你可以根據(jù)項(xiàng)目需要以清,在CLDropDownMenuView的基礎(chǔ)上封裝適合自己項(xiàng)目的菜單視圖儿普。

Expectation【期待】

如果在使用過程中遇到BUG,希望你能Issues我掷倔,謝謝(或者嘗試下載最新的框架代碼看看BUG修復(fù)沒有)
如果在使用過程中發(fā)現(xiàn)功能不夠用眉孩,希望你能Issues我,我非常想為這個(gè)框架增加更多好用的功能勒葱,謝謝

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浪汪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凛虽,更是在濱河造成了極大的恐慌死遭,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩维,死亡現(xiàn)場離奇詭異殃姓,居然都是意外死亡袁波,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蜗侈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來篷牌,“玉大人,你說我怎么就攤上這事踏幻〖霞眨” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵该面,是天一觀的道長夭苗。 經(jīng)常有香客問我,道長隔缀,這世上最難降的妖魔是什么题造? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮猾瘸,結(jié)果婚禮上界赔,老公的妹妹穿的比我還像新娘。我一直安慰自己牵触,他們只是感情好淮悼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著揽思,像睡著了一般袜腥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钉汗,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天羹令,我揣著相機(jī)與錄音,去河邊找鬼儡湾。 笑死特恬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的徐钠。 我是一名探鬼主播癌刽,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尝丐!你這毒婦竟也來了显拜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤爹袁,失蹤者是張志新(化名)和其女友劉穎远荠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體失息,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡譬淳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年档址,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邻梆。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡守伸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浦妄,到底是詐尸還是另有隱情尼摹,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布剂娄,位于F島的核電站蠢涝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏阅懦。R本人自食惡果不足惜和二,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耳胎。 院中可真熱鬧儿咱,春花似錦、人聲如沸场晶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诗轻。三九已至,卻和暖如春揭北,著一層夾襖步出監(jiān)牢的瞬間扳炬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工搔体, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恨樟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓疚俱,卻偏偏與公主長得像劝术,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子呆奕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 1养晋、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評論 3 119
  • 社會(huì)發(fā)展到一定階段出現(xiàn)了分工,每個(gè)成員在團(tuán)隊(duì)里各自貢獻(xiàn)技能梁钾,一起實(shí)現(xiàn)團(tuán)隊(duì)目標(biāo)绳泉。互聯(lián)網(wǎng)技術(shù)的出現(xiàn)姆泻,使得通過設(shè)計(jì)開發(fā)互...
    鄒志楠閱讀 12,705評論 12 31
  • 【我走了零酪,你自己要乖乖的冒嫡,要照顧好自己,要聽潘姐和蔡姐的話四苇⌒⒘瑁】此刻的kimi正站在機(jī)場大廳里對璐璐說道。 【好的你...
    石思琳閱讀 409評論 0 5