您的位置:首页 > 移动开发 > IOS开发

iOS下拉选择菜单简单封装

2016-11-01 10:48 621 查看

本文实例为大家分享了简单封装的iOS下拉选择菜单代码,供大家参考,具体内容如下

//
// OrderListDownMenu.h
#import <UIKit/UIKit.h>
@protocol OrderListDownMenuDelegate <NSObject>
- (void)OrderListDownMenu:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
@end
typedef void(^Dismiss)(void);
@interface OrderListDownMenu : UIView<UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, assign) id<OrderListDownMenuDelegate> delegate;
@property (nonatomic, strong) NSArray *arrData;
@property (nonatomic, strong) NSArray *arrImgName;
@property (nonatomic, copy) Dismiss dismiss;
- (instancetype)initWithDataArr:(NSArray *)dataArr origin:(CGPoint)origin width:(CGFloat)width rowHeight:(CGFloat)rowHeight;
- (void)dismissWithCompletion:(void (^)(OrderListDownMenu *object))completion;
@end
#import "OrderListDownMenu.h"
#define TopToView 63.0f
#define rightToView kScreenWidth - 15.0f
#define LeftToView kScreenWidth - 145.0 - 10.0f
#define CellLineEdgeInsets UIEdgeInsetsMake(0, -80, 0, 0)
#define kScreenWidth    [UIScreen mainScreen].bounds.size.width
#define kScreenHeight    [UIScreen mainScreen].bounds.size.height
@interface OrderListDownMenu()
@property (nonatomic, assign) CGPoint origin;
@property (nonatomic, assign) CGFloat rowHeight;
@end
@implementation OrderListDownMenu
- (instancetype)initWithDataArr:(NSArray *)dataArr origin:(CGPoint)origin width:(CGFloat)width rowHeight:(CGFloat)rowHeight {
self = [super initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
if (self) {
if (rowHeight <= 0) {
rowHeight = 50;
}
// 设置背景颜色
self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2];
self.origin = origin;
self.rowHeight = rowHeight;
self.arrData = [dataArr copy];
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(origin.x + LeftToView, origin.y + TopToView, width, rowHeight * dataArr.count) style:UITableViewStylePlain];
_tableView.dataSource = self;
_tableView.delegate = self;
[self addSubview:_tableView];
_tableView.backgroundColor = [UIColor whiteColor];
_tableView.layer.cornerRadius = 2;
_tableView.bounces = NO;
_tableView.layer.cornerRadius = 8;
_tableView.separatorColor = [UIColor colorWithWhite:0.3 alpha:1];
_tableView.separatorStyle = UITableViewCellSelectionStyleNone;
[_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:CellLineEdgeInsets];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:CellLineEdgeInsets];
}
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.arrData.count;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return self.rowHeight;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
cell.textLabel.textColor = THEME_COLOR_GRAY_1;
cell.textLabel.font = [UIFont systemFontOfSize:15];
cell.textLabel.text = self.arrData[indexPath.row];
if (self.arrImgName.count > indexPath.row) {
cell.imageView.image = [UIImage imageNamed:self.arrImgName[indexPath.row]];
cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
}
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(0, 49, _tableView.frame.size.width, 0.5);
label.backgroundColor = THEME_SEPARATOR_COLOR;
[cell.contentView addSubview:label];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if([self.delegate respondsToSelector:@selector(OrderListDownMenu:didSelectRowAtIndexPath:)]){
[self.delegate OrderListDownMenu:tableView didSelectRowAtIndexPath:indexPath];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[self dismissWithCompletion:nil];
}
- (void)dismissWithCompletion:(void (^)(OrderListDownMenu *object))completion {
__weak __typeof(self) weakSelf = self;
[UIView animateWithDuration:0.2 animations:^{
weakSelf.alpha = 0;
weakSelf.tableView.frame = CGRectMake(weakSelf.origin.x + LeftToView + 145, weakSelf.origin.y + TopToView, 0, 0);
} completion:^(BOOL finished) {
[weakSelf removeFromSuperview];
if (completion) {
completion(weakSelf);
}
if (weakSelf.dismiss) {
weakSelf.dismiss();
}
}];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if (![touch.view isEqual:self.tableView]) {
[self dismissWithCompletion:nil];
}
}
- (void)drawRect:(CGRect)rect {
//[colors[serie] setFill];
//拿到当前视图准备好的画板
CGContextRef context = UIGraphicsGetCurrentContext();
//利用path进行绘制三角形
CGContextBeginPath(context);//标记
CGContextMoveToPoint(context,
rightToView - 13, 53);//设置起点
CGContextAddLineToPoint(context,
rightToView - 21, TopToView);
CGContextAddLineToPoint(context,
rightToView - 4, TopToView);
CGContextClosePath(context);//路径结束标志,不写默认封闭
[self.tableView.backgroundColor setFill]; //设置填充色
[self.tableView.backgroundColor setStroke]; //设置边框颜色
CGContextDrawPath(context,
kCGPathFillStroke);//绘制路径path
}
@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 下拉菜单