自定义带有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

时间: 2024-10-25 05:08:30

自定义带有uitableview的alertview对话框的相关文章

android 自定义View【2】对话框取色&amp;色盘取色的实现

android 自定义View[2]对话框取色&色盘取色的实现    上一篇文章基本介绍了android自定义view的流程:继承view,复写view的一些方法.实现简单的自定义view.这篇文章主要介绍的是系统对话框取色功能,然后顺便介绍升级版,色盘取色[类似于ps中的吸管,对图片点击相应位置,获取那个位置的颜色]. 一.概述:通过该例子了解以下内容: 1.进一步了解android 自定义view. 2.知道如何获取图片上的颜色值. 3.监听屏幕touch,实现移动的时候自动取色.[onDr

自定义带有图片的PreferenceActivity

http://my.oschina.net/huangsm/blog/40027 和大家分享一下关于android中PreferenceActivity使用以及为配置信息文件中添加图标的功能,首先给大家看一下效果图: 大家可以看到这是最终的效果图,android提供了很大的空间供开发者可以自行定义控件,你想让你的控件长成什么样子,你就可以让它长成什么样子.自己也很推崇这类开发思想,因为自行定义控件(前提:系统内置的控件满足不了自己的需求)的优点不言而喻.这边主要分享两种类型:1:单纯标题类型:2

自定义网络加载中对话框

App在与服务器进行网络交互的时候,需要有一个提示的加载框,如图:,此时我们可以自定义一个加载中的对话框,代码如下: public class LoadingDialog extends Dialog { private static final int CHANGE_TITLE_WHAT = 1; private static final int CHNAGE_TITLE_DELAYMILLIS = 300; private static final int MAX_SUFFIX_NUMBER

ios实现带有输入框的AlertView

1,实现一个alertView 1 UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"" message:@"请输入Wi-Fi密码" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; 2 alertView.alertViewStyle = UIAlertViewSty

自定义带有渐变颜色的进度条

在项目中用到了渐变颜色的进度条 样式如下: 1.设置背景色颜色 2.设置边框圆角大小 3.设置渐变的颜色个数 4.设置渐变颜色 5.设置显示,隐藏进度条动画条纹 Demo地址:https://github.com/xqG/gradual-ProgressBar

用css实现自定义带有过渡和隐藏效果的滚动条

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

jQueryWEUI自定义对话框-带有textarea

jQueryWEUI 在jQueryWEUI中提供了很多类型的对话框, 可以去访问看一下. 今天记录的则是,自己定义的一个带有文本域的对话框,这样,可以不通过调转页面,实现一些信息的提交.比如,发送留言,发送回话. 官网上我们可以看到有一个带有输入框的对话框: $.prompt("自定义的消息内容", function(text) { //点击确认后的回调函数 //text 是用户输入的内容 }, function() { //点击取消后的回调函数 }); //如果参数过多,建议通过

Android 对话框 Dialog

对话框 Dialog 什么是对话框 对话框是在当前的页面之上弹出的小窗口, 用于显示一些重要的提示信息, 提示用户的输入,确认信息, 或显示某种状态.如 :  显示进度条对话框, 退出提示. 对话框的特点: 1, 当前界面弹出的小窗口. 2, 用户要与它进行交互, 可以接收用户输入的信息, 也可以反馈信息给用户. 常用对话框: 1, 普通对话框 AlertDialog 2, 进度条对话框  ProgressDialog 3, 日期对话框    DatePickerDialog 4, 时间对话框

安卓 Dialogs(对话框)

转载自:http://www.apkbus.com/home.php?mod=space&uid=679028&do=blog&id=61197 对话框是一个小的窗口用以提示用户做出决定或输入额外的信息.对话框不会填满屏幕并且通常被用作模态事件,要求用户做出行动才能继续下去. 对话框设计:关于如何设计你的对话框,包括一些建议,请阅读 Dialogs 设计向导. Dialog类是对话框的基类,你应该避免直接实例化Dialog.改为使用如下的一个子类: AlertDialog一个可以展