下拉选择菜单封装

来源:互联网 发布:内容营销的出路 知乎 编辑:程序博客网 时间:2024/05/18 15:04
////  OrderListDownMenu.h#import <UIKit/UIKit.h>@protocol OrderListDownMenuDelegate <NSObject>- (void)OrderListDownMenu:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;@endtypedef 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


1 0