http://blog.csdn.net/u012701023/article/details/51778657
- //
- // 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