iOS 下拉菜单

最近在做代码重构,发现之前写的下拉菜单不够灵活,所以决定再写一个可以灵活定制的下拉菜单。

先上代码 Demo

本Demo提供如下几种显示方式:
显示方式.png

效果示例:

导航栏显示.PNG
视图显示.PNG

相关属性设置:

@class SLDropdownMenu, SLSearchBar;

@protocol SLDropdownMenuDelegate <NSObject>

@optional
- (void)dropdownMenu:(SLDropdownMenu *)menu didSelectedRow:(NSInteger)row;

@end

@interface SLDropdownMenu : UIView

/**
 标题,若有dataSource,则默认为下拉列表数据第一个值。
 */
@property (nonatomic, copy) NSString *title;
@property (nonatomic) UIFont *titleFont;
@property (nonatomic) UIColor *titleColor;

/**
 附加图片,默认为nil。
 */
@property (nonatomic, strong) UIImage *accessoryImage;

/**
 附加图片排列方式,默认SLImageAlignmentDefault
 */
@property (nonatomic, assign) SLImageAlignment imageAlignment;

/**
 图片大小,默认CGSizeMake(22.f, 18.f)。
 */
@property (nonatomic, assign) CGSize imageSize;

/**
 下拉列表数据源。
 */
@property (nonatomic, strong) NSArray<NSString *> *dataSource;

/**
 模糊背景视图颜色透明度,默认黑色,透明度为0.f
 */
@property (nonatomic, assign) CGFloat dimmingViewColorAlpha;

/**
 弹出框宽度,默认为menu本身宽度,如果大于屏幕宽度,则按屏幕宽度布局。
 */
@property (nonatomic, assign) CGFloat popoverViewWidth;

/**
 弹出框背景颜色,默认[UIColor clearColor]
 */
@property (nonatomic, strong) UIColor *popoverViewBackgroundColor;

/**
 弹出框边框线宽度,默认为0.f
 */
@property (nonatomic, assign) CGFloat popoverViewBorderWidth;

/**
 弹出框边框线颜色,默认[UIColor clearColor]
 */
@property (nonatomic, strong) UIColor *popoverViewBorderColor;

/**
 弹出框显示模式,默认为SLPopoverViewModelDefault
 */
@property (nonatomic, assign) SLPopoverViewModel popoverModel;

/**
 气泡(三角形)高度,默认10.f
 */
@property (nonatomic, assign) CGFloat bubbleHeiht;

/**
 气泡绘制线条颜色,默认为弹出框边框线颜色
 */
@property (nonatomic, strong) UIColor *bubbleStrokeColor;

/**
 气泡填充颜色,默认[UIColor clearColor]
 */
@property (nonatomic, strong) UIColor *bubbleFillColor;

/**
 气泡显示位置,默认靠右:SLBubblePositionRight
 */
@property (nonatomic, assign) SLBubblePosition bubblePosition;

/**
 下拉列表内边距,默认UIEdgeInsetsZero。
 */
@property (nonatomic, assign) UIEdgeInsets tableViewEdgeInsets;
@property (nonatomic, strong) UIColor *tableViewBackgroundColor;
@property (nonatomic, strong) UIColor *tableViewSeparatorColor;
@property (nonatomic, assign) BOOL showSeparatorLine;

/**
 显示搜索框,默认NO(不显示)
 */
@property (nonatomic, assign) BOOL showSearchBar;
@property (nonatomic, strong) SLSearchBar *searchBar;

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

/**
 已选中行。
 */
@property (nonatomic, assign, readonly) NSInteger selectedRow;

/**
 设置选择行
 
 @param row 选择的行,若大于或等于dataSource的count,则无效。
 */
- (void)setSelectRow:(NSInteger)row;

@end

具体实现请查阅代码:Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,034评论 3 119
  • 姓名:胡心妍 公司:宁波塞纳电热电器有公司 【日精进打卡第188天】 【知~学习】 《六项精进》 背诵5遍 共90...
    Cindy初色的美阅读 906评论 0 0
  • 今年清明节放假三天,寻香茶社的小伙伴们也得以休息放松一下,携家带口回了趟老家。回家的目的有三。第一,回家祭拜先祖,...
    茶人老七阅读 3,184评论 0 0
  • [root@hadoop001 sourcecode]# pwd /opt/sourcecode [root@ha...
    CrUelAnGElPG阅读 1,274评论 0 1
  • 雪下的那么深,下的那么认真_威海,2017.12.16。 清晨,拉开窗帘,惊讶天气预报的准确,天色略暗,外面白白的...
    阿尔山的梦阅读 1,872评论 1 1