Files
benmy--tlchat/TLChat/Modules/Conversation/TLConversationViewController/TLAddMenuView/TLAddMenuView.m
T
2026-07-13 12:35:01 +08:00

141 lines
4.0 KiB
Objective-C

//
// TLAddMenuView.m
// TLChat
//
// Created by 李伯坤 on 16/3/11.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLAddMenuView.h"
#import "TLAddMenuCell.h"
#import "TLAppConfig.h"
#define WIDTH_TABLEVIEW 140.0f
#define HEIGHT_TABLEVIEW_CELL 45.0f
@interface TLAddMenuView () <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSArray *data;
@end
@implementation TLAddMenuView
- (id)init
{
if (self = [super init]) {
[self setBackgroundColor:[UIColor clearColor]];
[self addSubview:self.tableView];
UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dismiss)];
[self addGestureRecognizer:panGR];
[self.tableView registerClass:[TLAddMenuCell class] forCellReuseIdentifier:@"TLAddMenuCell"];
self.data = [TLAppConfig sharedConfig].addMenuItems;
}
return self;
}
- (void)showInView:(UIView *)view
{
[view addSubview:self];
[self setNeedsDisplay];
[self setFrame:view.bounds];
CGRect rect = CGRectMake(view.width - WIDTH_TABLEVIEW - 5, NAVBAR_HEIGHT + STATUSBAR_HEIGHT + 10, WIDTH_TABLEVIEW, self.data.count * HEIGHT_TABLEVIEW_CELL);
[self.tableView setFrame:rect];
}
- (BOOL)isShow
{
return self.superview != nil;
}
- (void)dismiss
{
[UIView animateWithDuration:0.2 animations:^{
[self setAlpha:0.0f];
} completion:^(BOOL finished) {
if (finished) {
[self removeFromSuperview];
[self setAlpha:1.0];
}
}];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self dismiss];
}
#pragma mark - # Delegate
//MARK: UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.data.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
TLAddMenuItem *item = [self.data objectAtIndex:indexPath.row];
TLAddMenuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TLAddMenuCell"];
[cell setItem:item];
return cell;
}
//MARK: UITableViewDelegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
TLAddMenuItem *item = [self.data objectAtIndex:indexPath.row];
if (self.itemSelectedAction) {
self.itemSelectedAction(self, item);
}
if (_delegate && [_delegate respondsToSelector:@selector(addMenuView:didSelectedItem:)]) {
[_delegate addMenuView:self didSelectedItem:item];
}
[tableView deselectRowAtIndexPath:indexPath animated:NO];
[self dismiss];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return HEIGHT_TABLEVIEW_CELL;
}
#pragma mark - # Private Methods
- (void)drawRect:(CGRect)rect
{
CGFloat startX = self.width - 27;
CGFloat startY = STATUSBAR_HEIGHT + NAVBAR_HEIGHT + 3;
CGFloat endY = STATUSBAR_HEIGHT + NAVBAR_HEIGHT + 10;
CGFloat width = 6;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, startX, startY);
CGContextAddLineToPoint(context, startX + width, endY);
CGContextAddLineToPoint(context, startX - width, endY);
CGContextClosePath(context);
[[UIColor colorBlackForAddMenu] setFill];
[[UIColor colorBlackForAddMenu] setStroke];
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark - # Getters
- (UITableView *)tableView
{
if (_tableView == nil) {
_tableView = [[UITableView alloc] init];
[_tableView setScrollEnabled:NO];
[_tableView setDelegate:self];
[_tableView setDataSource:self];
[_tableView setBackgroundColor:[UIColor colorBlackForAddMenu]];
[_tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[_tableView.layer setMasksToBounds:YES];
[_tableView.layer setCornerRadius:3.0f];
}
return _tableView;
}
@end