#import <UIKit/UIKit.h> typedef void(^MyCompleteHandler) (NSString *selectString); @interface TJCustomAlertViewOrTableView : UIView { MyCompleteHandler completeHandler; } @property(nonatomic,strong)NSMutableArray *dataSoureArray; +(TJCustomAlertViewOrTableView *)shareInStance; +(void)showAlertViewOrTableViewandCompleteHandler:(MyCompleteHandler)myCompleteHander; -(void)showAlertViewOrTableViewandCompleteHandler:(MyCompleteHandler)myCompleteHander; @end #import "TJCustomAlertViewOrTableView.h" #define kcontentViewSize CGSizeMake(200.0f, 250.0f); @interface TJCustomAlertViewOrTableView ()<UITableViewDataSource,UITableViewDelegate,UIGestureRecognizerDelegate> { UITableView *myTableView; UIView *contentView; UIButton *okBtn; NSInteger selectRow; } @end @implementation TJCustomAlertViewOrTableView +(TJCustomAlertViewOrTableView*)shareInStance { static TJCustomAlertViewOrTableView *customAlertViewOrTableView; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ customAlertViewOrTableView=[[TJCustomAlertViewOrTableView alloc]init]; }); return customAlertViewOrTableView; } -(instancetype)init { if (self=[super init]) { [self setUp]; } return self; } -(void)setUp { self.backgroundColor=[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5f]; self.frame=[UIScreen mainScreen].bounds; CGRect frect=CGRectZero; frect.size=kcontentViewSize; frect.origin.x=[UIScreen mainScreen].bounds.size.width/4.0f; frect.origin.y=[UIScreen mainScreen].bounds.size.height/4.0f; contentView=[[UIView alloc]initWithFrame:frect]; contentView.backgroundColor=[UIColor whiteColor]; contentView.layer.masksToBounds=YES; contentView.layer.cornerRadius=8.0f; [self addSubview:contentView]; UITapGestureRecognizer *tapBackGround=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissAlertViewOrTableView:)]; tapBackGround.delegate=self; [self addGestureRecognizer:tapBackGround]; okBtn=[UIButton buttonWithType:UIButtonTypeCustom]; okBtn.translatesAutoresizingMaskIntoConstraints=NO; [okBtn setTitle:@"确定" forState:UIControlStateNormal]; [okBtn addTarget:self action:@selector(dismissView:) forControlEvents:UIControlEventTouchUpInside]; [okBtn setBackgroundColor:[UIColor redColor]]; [contentView addSubview:okBtn]; NSArray *constraint_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[okBtn]-5-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(okBtn)]; NSArray *constraint_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[okBtn(44)]-5-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(okBtn)]; [contentView addConstraints:constraint_H]; [contentView addConstraints:constraint_V]; myTableView=[[UITableView alloc]init]; myTableView.translatesAutoresizingMaskIntoConstraints=NO; myTableView.delegate=self; myTableView.dataSource=self; [contentView addSubview:myTableView]; NSArray *tableView_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[myTableView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myTableView,okBtn)]; NSArray *tableView_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[myTableView]-49-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myTableView,okBtn)]; [contentView addConstraints:tableView_H]; [contentView addConstraints:tableView_V]; } -(void)dismissView:(UIButton *)sender { if (completeHandler) { completeHandler(_dataSoureArray[selectRow]); } [self hideView]; } -(void)dismissAlertViewOrTableView:(UITapGestureRecognizer *)tapGesture { CGPoint point=[tapGesture locationInView:self]; if (!CGRectContainsPoint(myTableView.frame, point)) { [self hideView]; } } -(void)showView { UIWindow *keyWindow=[UIApplication sharedApplication].keyWindow; [keyWindow addSubview:self]; contentView.alpha=0; contentView.transform=CGAffineTransformMakeScale(0.01f, 0.01f); [UIView animateWithDuration:0.3f animations:^{ contentView.alpha=1.0f; contentView.transform=CGAffineTransformMakeScale(1.0f, 1.0f); }]; } -(void)hideView { [UIView animateWithDuration:0.3f animations:^{ contentView.alpha=0; contentView.transform=CGAffineTransformMakeScale(0.01f, 0.01f); } completion:^(BOOL finished) { [self removeFromSuperview]; }]; } +(void)showAlertViewOrTableViewandCompleteHandler:(MyCompleteHandler)myCompleteHander { [[TJCustomAlertViewOrTableView shareInStance] showAlertViewOrTableViewandCompleteHandler:myCompleteHander]; } -(void)showAlertViewOrTableViewandCompleteHandler:(MyCompleteHandler)myCompleteHander { completeHandler=myCompleteHander; [self showView]; } #pragma mark -UITableViewDataSource or UITableViewDelegate -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return _dataSoureArray.count; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"Cell"]; if (!cell) { cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; } cell.textLabel.text=_dataSoureArray[indexPath.row]; return cell; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 44.0f; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { selectRow=indexPath.row; } -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if(touch.view==myTableView) { return YES; } return NO; } @end #import "ViewController.h" #import "TJCustomAlertViewOrTableView.h" @interface ViewController () { NSMutableArray *dataArray; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; dataArray=[NSMutableArray array]; for (int i=0; i<10; i++) { [dataArray addObject:[NSString stringWithFormat:@"test%d",i]]; } // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)showViewBtnClick:(UIButton *)sender { [TJCustomAlertViewOrTableView shareInStance].dataSoureArray=dataArray; // [[TJCustomAlertViewOrTableView shareInStance]showAlertViewOrTableViewandCompleteHandler:^(NSString *selectString) { // // NSLog(@"selectString=%@",selectString); // }]; [TJCustomAlertViewOrTableView showAlertViewOrTableViewandCompleteHandler:^(NSString *selectString) { NSLog(@"selectString=%@",selectString); }]; } @end
时间: 2024-10-25 05:08:30