最近在做代碼重構(gòu),發(fā)現(xiàn)之前寫(xiě)的下拉菜單不夠靈活,所以決定再寫(xiě)一個(gè)可以靈活定制的下拉菜單。
先上代碼 Demo
本Demo提供如下幾種顯示方式:

顯示方式.png
效果示例:
導(dǎo)航欄顯示.PNG
視圖顯示.PNG
相關(guān)屬性設(shè)置:
@class SLDropdownMenu, SLSearchBar;
@protocol SLDropdownMenuDelegate <NSObject>
@optional
- (void)dropdownMenu:(SLDropdownMenu *)menu didSelectedRow:(NSInteger)row;
@end
@interface SLDropdownMenu : UIView
/**
標(biāo)題,若有dataSource,則默認(rèn)為下拉列表數(shù)據(jù)第一個(gè)值。
*/
@property (nonatomic, copy) NSString *title;
@property (nonatomic) UIFont *titleFont;
@property (nonatomic) UIColor *titleColor;
/**
附加圖片,默認(rèn)為nil。
*/
@property (nonatomic, strong) UIImage *accessoryImage;
/**
附加圖片排列方式,默認(rèn)SLImageAlignmentDefault
*/
@property (nonatomic, assign) SLImageAlignment imageAlignment;
/**
圖片大小,默認(rèn)CGSizeMake(22.f, 18.f)。
*/
@property (nonatomic, assign) CGSize imageSize;
/**
下拉列表數(shù)據(jù)源。
*/
@property (nonatomic, strong) NSArray<NSString *> *dataSource;
/**
模糊背景視圖顏色透明度,默認(rèn)黑色,透明度為0.f
*/
@property (nonatomic, assign) CGFloat dimmingViewColorAlpha;
/**
彈出框?qū)挾?,默認(rèn)為menu本身寬度,如果大于屏幕寬度,則按屏幕寬度布局。
*/
@property (nonatomic, assign) CGFloat popoverViewWidth;
/**
彈出框背景顏色,默認(rèn)[UIColor clearColor]
*/
@property (nonatomic, strong) UIColor *popoverViewBackgroundColor;
/**
彈出框邊框線(xiàn)寬度,默認(rèn)為0.f
*/
@property (nonatomic, assign) CGFloat popoverViewBorderWidth;
/**
彈出框邊框線(xiàn)顏色,默認(rèn)[UIColor clearColor]
*/
@property (nonatomic, strong) UIColor *popoverViewBorderColor;
/**
彈出框顯示模式,默認(rèn)為SLPopoverViewModelDefault
*/
@property (nonatomic, assign) SLPopoverViewModel popoverModel;
/**
氣泡(三角形)高度,默認(rèn)10.f
*/
@property (nonatomic, assign) CGFloat bubbleHeiht;
/**
氣泡繪制線(xiàn)條顏色,默認(rèn)為彈出框邊框線(xiàn)顏色
*/
@property (nonatomic, strong) UIColor *bubbleStrokeColor;
/**
氣泡填充顏色,默認(rèn)[UIColor clearColor]
*/
@property (nonatomic, strong) UIColor *bubbleFillColor;
/**
氣泡顯示位置,默認(rèn)靠右:SLBubblePositionRight
*/
@property (nonatomic, assign) SLBubblePosition bubblePosition;
/**
下拉列表內(nèi)邊距,默認(rèn)UIEdgeInsetsZero。
*/
@property (nonatomic, assign) UIEdgeInsets tableViewEdgeInsets;
@property (nonatomic, strong) UIColor *tableViewBackgroundColor;
@property (nonatomic, strong) UIColor *tableViewSeparatorColor;
@property (nonatomic, assign) BOOL showSeparatorLine;
/**
顯示搜索框,默認(rèn)NO(不顯示)
*/
@property (nonatomic, assign) BOOL showSearchBar;
@property (nonatomic, strong) SLSearchBar *searchBar;
@property (nonatomic, weak) id<SLDropdownMenuDelegate> delegate;
/**
已選中行。
*/
@property (nonatomic, assign, readonly) NSInteger selectedRow;
/**
設(shè)置選擇行
@param row 選擇的行,若大于或等于dataSource的count,則無(wú)效。
*/
- (void)setSelectRow:(NSInteger)row;
@end
具體實(shí)現(xiàn)請(qǐng)查閱代碼:Demo