zoukankan      html  css  js  c++  java
  • 自定义带有uitableview的alertview对话框

    #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

  • 相关阅读:
    [置顶] kubernetes资源类型--DaemonSet
    Docker容器的自动化监控实现
    [置顶] docker--基础镜像和dockerfile
    Target runtime Apache Tomcat v8.0 is not defined
    jeecg-org.jeecgframework.web.system.listener.InitListener
    tomcat:利用tomcat部署war包格式的项目
    更换jdk版本:jdk1.8更换为jdk1.7之后输入java -version还是出现1.8的版本号
    Maven项目下WEB-INFO目录下没有编译的classes文件
    解决maven web项目Cannot detect Web Project version. Please specify version of Web Project through...的错误
    如何提高maven的下载速度:享受一下mvn时飞的感觉
  • 原文地址:https://www.cnblogs.com/thbbsky/p/4287903.html
Copyright © 2011-2022 走看看