呆! 剛發現github寫的很詳細。。。
效果圖
- 導入頭文件
#import "DOPDropDownMenu.h"
- 設置代理
<DOPDropDownMenuDataSource,DOPDropDownMenuDelegate>
- 創建數組 與 下拉菜單
@property (nonatomic, strong) NSArray *classifys;
///美食列表數組
@property (nonatomic, strong) NSArray *cates;
///電影列表數組
@property (nonatomic, strong) NSArray *movices;
///酒店列表數組
@property (nonatomic, strong) NSArray *hostels;
///區域列表數組
@property (nonatomic, strong) NSArray *areas;
///排序列表數組
@property (nonatomic, strong) NSArray *sorts;
///下拉菜單
@property (nonatomic, weak) DOPDropDownMenu *menu;
- 數據 與 菜單的初始化創建
// 數據
self.classifys = @[@"美食",@"今日新單",@"電影",@"酒店"];
self.cates = @[@"自助餐",@"快餐",@"火鍋",@"日韓料理",@"西餐",@"燒烤小吃"];
self.movices = @[@"內地劇",@"港臺劇",@"英美劇"];
self.hostels = @[@"經濟酒店",@"商務酒店",@"連鎖酒店",@"度假酒店",@"公寓酒店"];
self.areas = @[@"全城",@"芙蓉區",@"雨花區",@"天心區",@"開福區",@"岳麓區"];
self.sorts = @[@"默認排序",@"離我最近",@"好評優先",@"人氣優先",@"最新發布"];
// 添加下拉菜單
DOPDropDownMenu *menu = [[DOPDropDownMenu alloc] initWithOrigin:CGPointMake(0, 64) andHeight:44];
menu.delegate = self;
menu.dataSource = self;
[self.view addSubview:menu];
_menu = menu;
// 創建menu 第一次顯示 不會調用點擊代理,可以用這個手動調用
[menu selectDefalutIndexPath];
- 詳細設置
#pragma mark - 設置列數
- (NSInteger)numberOfColumnsInMenu:(DOPDropDownMenu *)menu
{
return 3;
}
#pragma mark 設置每一列有幾項
- (NSInteger)menu:(DOPDropDownMenu *)menu numberOfRowsInColumn:(NSInteger)column
{
if (column == 0) {
return self.classifys.count;
}else if (column == 1){
return self.areas.count;
}else {
return self.sorts.count;
}
}
#pragma mark 設置每一列中每一項標題
- (NSString *)menu:(DOPDropDownMenu *)menu titleForRowAtIndexPath:(DOPIndexPath *)indexPath
{
if (indexPath.column == 0) {
return self.classifys[indexPath.row];
} else if (indexPath.column == 1){
return self.areas[indexPath.row];
} else {
return self.sorts[indexPath.row];
}
}
#pragma mark 設置每一列中每一項的圖片 如:美食
- (NSString *)menu:(DOPDropDownMenu *)menu imageNameForRowAtIndexPath:(DOPIndexPath *)indexPath
{
//這里設置的是 第一列和第二列 圖片一樣
if (indexPath.column == 0 || indexPath.column == 1) {
return [NSString stringWithFormat:@"ic_filter_category_%ld",indexPath.row];
}
return nil;
}
#pragma mark 設置底層分類圖片 如:美食中每一項的圖片
- (NSString *)menu:(DOPDropDownMenu *)menu imageNameForItemsInRowAtIndexPath:(DOPIndexPath *)indexPath
{
//這里設置的是 第一列每一項中 的圖片
if (indexPath.column == 0 && indexPath.item >= 0) {
return [NSString stringWithFormat:@"ic_filter_category_%ld",indexPath.item];
}
return nil;
}
#pragma mark 設置每一列中每一項的個數
- (NSString *)menu:(DOPDropDownMenu *)menu detailTextForRowAtIndexPath:(DOPIndexPath *)indexPath
{
//這里設置的是前兩列中 每一項的個數
if (indexPath.column < 2) {
return [@(arc4random()%1000) stringValue];
}
return nil;
}
#pragma mark 設置每一列每一項中的個數
- (NSString *)menu:(DOPDropDownMenu *)menu detailTextForItemsInRowAtIndexPath:(DOPIndexPath *)indexPath
{
//這里 因為只有第一列 有三級菜單 所以不判斷是那一列 如果要判斷參考上邊
return [@(arc4random()%1000) stringValue];
}
#pragma mark 設置每一列中每一項有多少項
- (NSInteger)menu:(DOPDropDownMenu *)menu numberOfItemsInRow:(NSInteger)row column:(NSInteger)column
{
//這里只設置了第一列
if (column == 0) {
if (row == 0) {
return self.cates.count;
} else if (row == 1){
return 5;
} else if (row == 2){
return self.movices.count;
} else if (row == 3){
return self.hostels.count;
}
}
return 0;
}
#pragma mark 設置每一列中的每一項中的所有標題
- (NSString *)menu:(DOPDropDownMenu *)menu titleForItemsInRowAtIndexPath:(DOPIndexPath *)indexPath
{
//這里只設置了第一列
if (indexPath.column == 0) {
if (indexPath.row == 0) {
return self.cates[indexPath.item];
} else if (indexPath.row == 1) {
return @"哈哈哈";
} else if (indexPath.row == 2){
return self.movices[indexPath.item];
} else if (indexPath.row == 3){
return self.hostels[indexPath.item];
}
}
return nil;
}
#pragma mark - 接收點擊事件
- (void)menu:(DOPDropDownMenu *)menu didSelectRowAtIndexPath:(DOPIndexPath *)indexPath
{
if (indexPath.item >= 0) {
NSLog(@"點擊了 %ld - %ld - %ld 項目",indexPath.column,indexPath.row,indexPath.item);
}else {
NSLog(@"點擊了 %ld - %ld 項目",indexPath.column,indexPath.row);
}
}
- 可選項
//TODO: 設置一個按鈕 選中某一列某一項
- (IBAction)selectIndexPathAction:(id)sender {
[_menu selectIndexPath:[DOPIndexPath indexPathWithCol:0 row:2 item:2]];
}