You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

257 lines
7.3 KiB

//
// WTListButton.m
// me_watch
//
// Created by yuklng on 2017/1/20.
// Copyright © 2017年 yuklng. All rights reserved.
//
#import "WTListButton.h"
#import "UIView+Extension.h"
#import "WTListButtonCell.h"
@interface WTListButton()<UITableViewDelegate,UITableViewDataSource>
@end
@implementation WTListButton{
UITableView* choose_table;
UIImageView* xialaImg;
BOOL isShow;
}
#pragma mark 初始化
- (instancetype)init
{
self = [self initWithList:@[] frame:CGRectMake(0, 0, 0, 0)];
return self;
}
-(instancetype)initWithFrame:(CGRect)frame{
return [self initWithList:@[] frame:frame];
}
-(instancetype)initWithList:(NSArray *)text_list frame:(CGRect)frame{
self =[super initWithFrame:frame];
if (self) {
_text_list =[[NSArray alloc] initWithArray:text_list];
self.clickOnClose =YES;
isShow =NO;
self.curIndex =0;
}
return self;
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
[self setTable];
if (choose_table) {
[choose_table reloadData];
}
}
#pragma mark 设置table
-(void)setTable{
if (!choose_table) {
choose_table =[[UITableView alloc] initWithFrame:self.bounds];
choose_table.x =self.frame.origin.x;
choose_table.y =self.getAbsoluteY + 20;
choose_table.width =self.width;
choose_table.height =self.height*[_text_list count];
choose_table.delegate =self;
choose_table.dataSource =self;
choose_table.layer.borderColor =[UIColor grayColor].CGColor;
choose_table.layer.borderWidth =0.2;
choose_table.layer.cornerRadius =5.0;
choose_table.layer.masksToBounds=YES;
choose_table.separatorStyle = NO;
}
}
#pragma mark UITableViewDelegate
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [_text_list count];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return self.height;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *cellIdentifier = @"cell";
WTListButtonCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
{
cell = [[WTListButtonCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.textLabel.textColor =[UIColor blackColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UIFont* newFont =[UIFont preferredFontForTextStyle:UIFontTextStyleBody];
UIFontDescriptor* ctfFont =newFont.fontDescriptor;
NSNumber* fontString =[ctfFont objectForKey:@"NSFontSizeAttribute"];
cell.textLabel.font =[UIFont systemFontOfSize:fontString.floatValue-1];
cell.textLabel.textAlignment = NSTextAlignmentCenter;
}
cell.textLabel.text =_text_list[indexPath.row];
if ([cell respondsToSelector:@selector(setSeparatorInset:)])
{
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)])
{
[cell setLayoutMargins:UIEdgeInsetsZero];
}
return cell;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row ==self.curIndex) {
[cell setSelected:YES animated:NO];
}
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[self hideAnimation];
if (self.block && indexPath.row != self.curIndex) {
self.curIndex = indexPath.row;
[self setTitle:_text_list[indexPath.row] forState:UIControlStateNormal];
self.block(self, indexPath.row);
}
}
#pragma mark view_action
- (void)show{
if (_text_list.count > 1) {
// isShow = YES;
NSIndexPath* curIndexPath =[NSIndexPath indexPathForRow:0 inSection:self.curIndex];
[choose_table selectRowAtIndexPath:curIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[[self topView] addSubview:choose_table];
// NSIndexPath* curIndexPath =[NSIndexPath indexPathForRow:0 inSection:self.curIndex];
//// [choose_table selectRowAtIndexPath:curIndexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
// [[choose_table cellForRowAtIndexPath:curIndexPath] setSelected:YES animated:YES];
// [choose_table reloadData];
if ([choose_table respondsToSelector:@selector(setSeparatorInset:)])
{
[choose_table setSeparatorInset:UIEdgeInsetsZero];
}
if ([choose_table respondsToSelector:@selector(setLayoutMargins:)])
{
[choose_table setLayoutMargins:UIEdgeInsetsZero];
}
if (choose_table) {
[choose_table reloadData];
}
}
}
- (void)show:(UIViewController*)vc{
if (_text_list.count > 1) {
[vc.view addSubview:choose_table];
if ([choose_table respondsToSelector:@selector(setSeparatorInset:)])
{
[choose_table setSeparatorInset:UIEdgeInsetsZero];
}
if ([choose_table respondsToSelector:@selector(setLayoutMargins:)])
{
[choose_table setLayoutMargins:UIEdgeInsetsZero];
}
if (choose_table) {
[choose_table reloadData];
}
}
}
//去除该组件
- (void)hideAnimation{
isShow = NO;
[choose_table removeFromSuperview];
}
-(void)setText_list:(NSArray *)text_list{
_text_list =[[NSArray alloc] initWithArray:text_list];
if (choose_table) {
choose_table.height =self.height*[_text_list count];
[choose_table reloadData];
}
}
-(void)setText_list:(NSArray *)text_list block:(BlockListBtnClick)block{
self.curIndex = [text_list indexOfObject:self.titleLabel.text];
[self setText_list:text_list];
if (!xialaImg) {
xialaImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"xiala"]];
[self addSubview:xialaImg];
// xialaImg.size
// xialaImg.x = self.width - 30;
// xialaImg.centerY = self.centerY;
}
if (text_list.count > 1) {
xialaImg.hidden = NO;
}else{
xialaImg.hidden = YES;
}
// //交换文字和图片的位置
// [self setTitleEdgeInsets:UIEdgeInsetsMake(0, -self.imageView.image.size.width,
// 0, self.imageView.image.size.width)];
// [self setImageEdgeInsets:UIEdgeInsetsMake(0, self.titleLabel.frame.size.width + 5,
// 0, -self.titleLabel.frame.size.width)];
if (block) {
self.block = block;
}
[self addTarget:self action:@selector(action) forControlEvents:UIControlEventTouchDown];
}
- (void)action{
if (isShow) {
[self hideAnimation];
}else{
isShow = YES;
[self show];
}
}
//获取根视图
-(UIView*)topView{
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
return rootViewController.view;
}
@end