封裝下拉菜單

效果圖:

A9CCF5C3D52B7B408E9175FFA03F213D.gif

下拉菜單
首先昨登,上面下拉菜單為Button,點(diǎn)擊調(diào)用顯示方法贯底。第一行第二行......是一個tableView丰辣,下面是一個黑色背景,需要設(shè)置透明度丈甸。

最開始糯俗,tableView隱藏尿褪,背景View隱藏睦擂,調(diào)用顯示方法之后,背景出現(xiàn)杖玲,tableView出現(xiàn)顿仇。

因?yàn)橐蟹庋b性,所以新建一個DropDownView摆马,繼承于UIView.

DropDownView.h


#importtypedef void(^SelectBlock)(NSString *title, NSInteger row);

//@protocol DropDownViewDelegate

//-(void)didSelectRow:(NSInteger)row title:(NSString *)title;

//@end

@interface DropDownView : UIView@property (strong, nonatomic) UITableView *tableView;

/**

選項(xiàng)的數(shù)組 

**/

@property (strong, nonatomic) NSArray *titles;

/**

行高

 **/

@property (assign, nonatomic) CGFloat rowHeight;

/**

被選中的行,默認(rèn)0

 **/

@property (assign, nonatomic) CGFloat selectIndex;//@property (weak, nonatomic) iddelegate;

/**

菜單寬度,默認(rèn)屏幕寬度

**/

@property (assign, nonatomic) CGFloat menuWidth;

/**

選中顏色

**/

@property (strong, nonatomic) UIColor *selectColor;

/**

正常顏色,默認(rèn)黑色

**/

@property (strong, nonatomic) UIColor *normalColor;

/**

觸發(fā)點(diǎn)擊的block

**/

@property (copy, nonatomic) SelectBlock selectRow;

/**

顯示的方法

**/

-(void)show;

/**

隱藏的方法

**/

-(void)hidden;

@end

DropDownView.m


#define WIDTH [UIScreen mainScreen].bounds.size.width

#import "DropDownView.h"

#import "DownViewTableViewCell.h"

static NSString *identifier = @"DownVIewCell";

@interface DropDownView()

@property (strong, nonatomic) UIView *bgView;//背景

@property (strong, nonatomic) UITapGestureRecognizer *tap;//手勢

@end

@implementation DropDownView

//初始化

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

//添加手勢臼闻,點(diǎn)擊調(diào)用隱藏方法

_tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hidden)];

if (_menuWidth == 0) {

_menuWidth = [UIScreen mainScreen].bounds.size.width;

}

//接下來是背景

_bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, _menuWidth, frame.size.height)];

_bgView.backgroundColor = [UIColor blackColor];

_bgView.alpha = 0;

[_bgView addGestureRecognizer:_tap];

[self addSubview:_bgView];

//關(guān)于tableView

_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, _menuWidth, 0)];

_tableView.delegate =self;

_tableView.dataSource = self;

_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

[_tableView registerNib:[UINib nibWithNibName:@"DownViewTableViewCell" bundle:nil] forCellReuseIdentifier:identifier];

[self addSubview:_tableView];

//隱藏,0為NO囤采,1為YES

self.hidden = 1;

}

return self;

}

-(void)awakeFromNib{

[super awakeFromNib];

CGRect frame = self.frame;

_tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hidden)];

if (_menuWidth == 0) {

_menuWidth = [UIScreen mainScreen].bounds.size.width;

}

//接下來是背景

_bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, _menuWidth, frame.size.height)];

_bgView.backgroundColor = [UIColor blackColor];

_bgView.alpha = 0;

[_bgView addGestureRecognizer:_tap];

[self addSubview:_bgView];

_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, _menuWidth, 0)];

_tableView.delegate =self;

_tableView.dataSource = self;

_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

[_tableView registerNib:[UINib nibWithNibName:@"DownViewTableViewCell" bundle:nil] forCellReuseIdentifier:identifier];

[self addSubview:_tableView];

self.hidden = 1;

}

-(void)show

{

if (!self.hidden) {

[self hidden];

return;

}

self.hidden = 0;

[UIView animateWithDuration:0.25 animations:^{

_bgView.alpha = 0.3;

_tableView.frame = CGRectMake(0, 0, _menuWidth, _titles.count * 36);

}];

}

-(void)hidden

{

[UIView animateWithDuration:0.25 animations:^{

_bgView.alpha = 0;

_tableView.frame = CGRectMake(0, 0, _menuWidth, 0);

} completion:^(BOOL finished) {

self.hidden = 1;

}];

}

//setter方法的增補(bǔ)

-(void)setTitles:(NSArray *)titles{

_titles = titles;

[_tableView reloadData];

}

-(UIColor *)selectColor{

if (_selectColor == nil) {

_selectColor = [UIColor colorWithRed:0x3e / 255.0 green:0x7e / 255.0 blue:0xc7 / 255.0 alpha:1];

}

return _selectColor;

}

-(UIColor *)normalColor{

if (_selectColor == nil) {

_selectColor = [UIColor blackColor];

}

return _selectColor;

}

-(CGFloat)rowHeight{

if (_rowHeight == 0) {

_rowHeight = 36;

}

return _rowHeight;

}

//表格代理

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

return self.rowHeight;

}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

return _titles.count;

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

DownViewTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

cell.titleLabel.text = _titles[indexPath.row];

if (indexPath.row == _selectIndex) {

cell.titleLabel.textColor = self.selectColor;

cell.img.hidden = 0;

} else {

cell.titleLabel.textColor = self.normalColor;

cell.img.hidden = 1;

}

return cell;

}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

//    [_delegate didSelectRow:indexPath.row title:_titles[indexPath.row]];

_selectRow(_titles[indexPath.row], indexPath.row);

_selectIndex = indexPath.row;

[_tableView reloadData];

[self hidden];

}

@end

新建一個tableViewCell述呐,設(shè)置cell的樣式。此處為左邊一個label蕉毯,右邊一個imageView乓搬。

最后在ViewController里面使用這個封裝的下拉菜單:

ViewController.m


#import "ViewController.h"

#import "DropDownView.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet DropDownView *dropView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

_dropView.titles = @[@"第一行",@"第二行",@"第三行",@"第四行",@"第五行",@"第六行"];

_dropView.selectRow = ^(NSString *title, NSInteger row) {

NSLog(@"選中了第%d行,標(biāo)題是%@",(int)row,title);

};

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

- (IBAction)open:(id)sender {

[_dropView show];

}

@end

ok,一個簡單的下拉菜單完畢代虾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末进肯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棉磨,更是在濱河造成了極大的恐慌江掩,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異环形,居然都是意外死亡策泣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門斟赚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來着降,“玉大人,你說我怎么就攤上這事拗军∪味矗” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵发侵,是天一觀的道長交掏。 經(jīng)常有香客問我,道長刃鳄,這世上最難降的妖魔是什么盅弛? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮叔锐,結(jié)果婚禮上挪鹏,老公的妹妹穿的比我還像新娘。我一直安慰自己愉烙,他們只是感情好讨盒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著步责,像睡著了一般返顺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔓肯,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天遂鹊,我揣著相機(jī)與錄音,去河邊找鬼蔗包。 笑死秉扑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的调限。 我是一名探鬼主播舟陆,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旧噪!你這毒婦竟也來了吨娜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤淘钟,失蹤者是張志新(化名)和其女友劉穎宦赠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勾扭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年毡琉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妙色。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡桅滋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出身辨,到底是詐尸還是另有隱情丐谋,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布煌珊,位于F島的核電站号俐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏定庵。R本人自食惡果不足惜吏饿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔬浙。 院中可真熱鬧猪落,春花似錦、人聲如沸畴博。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绎晃。三九已至蜜唾,卻和暖如春杂曲,著一層夾襖步出監(jiān)牢的瞬間庶艾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工擎勘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咱揍,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓棚饵,卻偏偏與公主長得像煤裙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子噪漾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345