下拉列表的使用

最近做項目用到一個關(guān)于下拉列表選擇提現(xiàn)的控件,就在網(wǎng)上找了一下并結(jié)合自己的需求重新做了一個demo窖梁,希望用到的可以看看

首先介紹一下ZBDropdownMenu.h文件,該類有一個代理方法夹囚,用于點擊下拉列表后在列表消失或者出現(xiàn)時做一些事情纵刘,最后一個代理用于點擊獲取當(dāng)前cell,進行其他操作

@class ZBDropdownMenu;

@protocol ZBDropdownMenuDelegate <NSObject>

@optional
- (void)dropdownMenuWillShow:(ZBDropdownMenu *)menu;    // 當(dāng)下拉菜單將要顯示時調(diào)用
- (void)dropdownMenuDidShow:(ZBDropdownMenu *)menu;     // 當(dāng)下拉菜單已經(jīng)顯示時調(diào)用
- (void)dropdownMenuWillHidden:(ZBDropdownMenu *)menu;  // 當(dāng)下拉菜單將要收起時調(diào)用
- (void)dropdownMenuDidHidden:(ZBDropdownMenu *)menu;   // 當(dāng)下拉菜單已經(jīng)收起時調(diào)用

- (void)dropdownMenu:(ZBDropdownMenu *)menu selectedCellNumber:(NSInteger)number; // 當(dāng)選擇某個選項時調(diào)用

@end


@interface ZBDropdownMenu : UIView <UITableViewDataSource,UITableViewDelegate>

@property (nonatomic,strong) UIButton * mainBtn;  // 主按鈕 可以自定義樣式 可在.m文件中修改默認的一些屬性

@property (nonatomic,strong) NSString * title;    // 可以定義按鈕title

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


- (void)setMenuTitles:(NSArray *)titlesArr rowHeight:(CGFloat)rowHeight;  // 設(shè)置下拉菜單控件樣式

- (void)showDropDown; // 顯示下拉菜單
- (void)hideDropDown; // 隱藏下拉菜單

下面介紹一下最主要的兩個方法就是點擊消失或者出現(xiàn)下拉動畫荸哟,其實就是改變tableView的高度假哎,并加入動畫即可

- (void)showDropDown{   // 顯示下拉列表
    
    [_listView.superview bringSubviewToFront:_listView]; // 將下拉列表置于最上層
    
    if ([self.delegate respondsToSelector:@selector(dropdownMenuWillShow:)]) {
        [self.delegate dropdownMenuWillShow:self]; // 將要顯示回調(diào)代理
    }
    // 改變箭頭方向
    _arrowMark.transform = CGAffineTransformMakeRotation(M_PI);
    
    [UIView animateWithDuration:AnimateTime animations:^{
        
        _listView.frame  = CGRectMake(_listView.X,
                                      _listView.Y
        , _listView.Witdh, _rowHeight *_titleArr.count);
        _tableView.frame = CGRectMake(0, 0, _listView.Witdh, _listView.Height);
        
    }completion:^(BOOL finished) {
        
        if ([self.delegate respondsToSelector:@selector(dropdownMenuDidShow:)]) {
            [self.delegate dropdownMenuDidShow:self]; // 已經(jīng)顯示回調(diào)代理
        }
    }];
    
    _mainBtn.selected = YES;
}

隱藏動畫

- (void)hideDropDown{  // 隱藏下拉列表
    
    if ([self.delegate respondsToSelector:@selector(dropdownMenuWillHidden:)]) {
        [self.delegate dropdownMenuWillHidden:self]; // 將要隱藏回調(diào)代理
    }
    
    _arrowMark.transform = CGAffineTransformIdentity;
    [UIView animateWithDuration:AnimateTime animations:^{
        
        _listView.frame  = CGRectMake(_listView.X, _listView.Y, _listView.Witdh, 0);
        _tableView.frame = CGRectMake(0, 0, _listView.Witdh, _listView.Height);
        
    }completion:^(BOOL finished) {
        
        if ([self.delegate respondsToSelector:@selector(dropdownMenuDidHidden:)]) {
            [self.delegate dropdownMenuDidHidden:self]; // 已經(jīng)隱藏回調(diào)代理
        }
    }];
    
    _mainBtn.selected = NO;
}

使用方法很簡單,直接創(chuàng)建一個對象鞍历,并添加下拉列表的數(shù)據(jù),并給title設(shè)置自己的風(fēng)格

    NSArray *titleArray = @[@"儲蓄銀行卡",@"微信",@"支付寶"];
    ZBDropdownMenu * dropdownMenu = [[ZBDropdownMenu alloc] init];
    [dropdownMenu setFrame:CGRectMake(14, 144, SCREEN_WIDTH - 28, 50)];
    [dropdownMenu setMenuTitles:titleArray rowHeight:50];
    dropdownMenu.delegate = self;
    dropdownMenu.title = @"提現(xiàn)方式";
    dropdownMenu.tag = 0;
    // 給title設(shè)置富文本
    NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@:   %@",dropdownMenu.title,titleArray[0]]];
    [str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,dropdownMenu.title.length)];
    [str addAttribute:NSForegroundColorAttributeName value:[UIColor lightGrayColor] range:NSMakeRange(dropdownMenu.title.length+4,[titleArray[0] length])];
    [dropdownMenu.mainBtn setAttributedTitle:str forState:UIControlStateNormal];
    
    [self.view addSubview:dropdownMenu];
    

詳細完整demo 地址下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舵抹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子劣砍,更是在濱河造成了極大的恐慌惧蛹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異香嗓,居然都是意外死亡迅腔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門靠娱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沧烈,“玉大人,你說我怎么就攤上這事像云⌒咳福” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵迅诬,是天一觀的道長汤锨。 經(jīng)常有香客問我,道長百框,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任牍汹,我火速辦了婚禮铐维,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慎菲。我一直安慰自己嫁蛇,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布露该。 她就那樣靜靜地躺著睬棚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪解幼。 梳的紋絲不亂的頭發(fā)上抑党,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音撵摆,去河邊找鬼底靠。 笑死,一個胖子當(dāng)著我的面吹牛特铝,可吹牛的內(nèi)容都是我干的暑中。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼鲫剿,長吁一口氣:“原來是場噩夢啊……” “哼鳄逾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灵莲,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤雕凹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體请琳,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡粱挡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了俄精。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片询筏。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖竖慧,靈堂內(nèi)的尸體忽然破棺而出嫌套,到底是詐尸還是另有隱情,我是刑警寧澤圾旨,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布踱讨,位于F島的核電站,受9級特大地震影響砍的,放射性物質(zhì)發(fā)生泄漏痹筛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一廓鞠、第九天 我趴在偏房一處隱蔽的房頂上張望帚稠。 院中可真熱鬧,春花似錦床佳、人聲如沸滋早。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杆麸。三九已至,卻和暖如春浪感,著一層夾襖步出監(jiān)牢的瞬間昔头,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工影兽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留减细,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓赢笨,卻偏偏與公主長得像未蝌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茧妒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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