zoukankan      html  css  js  c++  java
  • 提示选择框

    #import <UIKit/UIKit.h>
    
    @interface MgsSelectListView : UIView
    
    @property(nonatomic,strong)NSArray *allkeys;
    @property(nonatomic,strong)NSDictionary *datadictionary;
    @property(nonatomic,strong)void (^callback)(BOOL success,NSString *keyString,NSString *showString);
    
    
    /*
     param1 : 父view  
     param2 : 展示数据的格式 @{@"key1":@"value1",@"key2":@"value"}
     param3 : 筛选类型的标题
     callback : 选中数据的 key value (比如: key1,value1)
     */
    +(void)showInSuperView:(UIView *)superView dataDic:(NSDictionary *)aDictionary title:(NSString *)titleText callback:(void(^)(BOOL success,NSString *keyString,NSString *showString))callback;
    @end
    //
    //  MgsSelectListView.m
    //  提示筛选
    //
    //  Created by admin on 16/1/15.
    //  Copyright © 2016年 123. All rights reserved.
    //
    
    #import "MgsSelectListView.h"
    
    @implementation MgsSelectListView
    
    +(void)showInSuperView:(UIView *)superView dataDic:(NSDictionary *)aDictionary title:(NSString *)titleText callback:(void (^)(BOOL, NSString *keyString, NSString *showString))callback
    {
        MgsSelectListView *mgs = (MgsSelectListView *)[superView viewWithTag:9326];
        if (!mgs)
        {
            mgs = [MgsSelectListView new];
            mgs.tag = 9326;
            [superView addSubview:mgs];
        }
        
        
        UIButton *background = (UIButton *)[superView viewWithTag:8359];
        if (!background)
        {
            background = [[UIButton alloc]initWithFrame:superView.frame];
            background.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
            background.tag = 8359;
            [background addTarget:mgs action:@selector(backgroundClick:) forControlEvents:UIControlEventTouchUpInside];
            [superView addSubview:background];
        }
        
        UIView *dataView = [superView viewWithTag:62495];
        if (!dataView)
        {
            dataView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, superView.bounds.size.width - 100, (aDictionary.count+1)*44+15)];
            dataView.center = superView.center;
            dataView.tag = 62495;
            dataView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
            dataView.layer.cornerRadius = 12.0f;
            dataView.clipsToBounds = YES;
            dataView.layer.masksToBounds = YES;
            [superView addSubview:dataView];
            
            
            UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0,dataView.bounds.size.width, 44)];
            titleLabel.text = titleText;
            titleLabel.backgroundColor = [UIColor clearColor];
            titleLabel.textColor = [UIColor whiteColor];
            titleLabel.textAlignment = NSTextAlignmentCenter;
            [dataView addSubview:titleLabel];
            
            UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(1, 44, dataView.bounds.size.width-2,1)];
            imageView.image = [UIImage imageNamed:@"halving"];
            [dataView addSubview:imageView];
            
            
            mgs.allkeys = [aDictionary allKeys];
            mgs.datadictionary = aDictionary;
            for (int i = 0;i < mgs.allkeys.count;i++)
            {
                UIButton *inButton = [UIButton buttonWithType:UIButtonTypeCustom];
                [inButton setTitle:aDictionary[mgs.allkeys[i]] forState:UIControlStateNormal];
                //怎么实现让button中的文字左对齐  或者右对齐
                inButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
                //设置button的标题离边界的距离
                inButton.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
                [inButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
                inButton.backgroundColor = [UIColor clearColor];
                inButton.tag = 99000+i;
                inButton.frame = CGRectMake(0, 49 + i*44, dataView.bounds.size.width, 44);
                [inButton addTarget:mgs action:@selector(inButtonClick:) forControlEvents:UIControlEventTouchUpInside];
                [dataView addSubview:inButton];
            }
        }
        [UIView animateWithDuration:0.5 animations:^{
            [superView bringSubviewToFront:background];
            [superView bringSubviewToFront:dataView];
            dataView.hidden = NO;
            background.hidden = NO;
        }];
        mgs.callback = callback;
    }
    -(void)backgroundClick:(UIButton *)sender
    {
        UIView *superView = sender.superview;
        UIView *dataView = [superView viewWithTag:62495];
        [UIView animateWithDuration:0.5 animations:^{
            [superView sendSubviewToBack:sender];
            [superView sendSubviewToBack:dataView];
            dataView.hidden = YES;
            sender.hidden = YES;
        }];
    }
    -(void)inButtonClick:(UIButton *)sender
    {
        NSInteger index = sender.tag - 99000;
        NSString *key = self.allkeys[index];
        NSString *value = self.datadictionary[key];
        self.callback(YES,key,value);
        
        UIView *dataView = sender.superview;
        UIView *superView = dataView.superview;
        UIButton *background = (UIButton *)[superView viewWithTag:8359];
        [UIView animateWithDuration:0.5 animations:^{
            [superView sendSubviewToBack:background];
            [superView sendSubviewToBack:dataView];
            dataView.hidden = YES;
            background.hidden = YES;
        }];
    }
    @end

    调用方式:

    1.导入头文件

    #import "MgsSelectListView.h"

    2.调用封装的类方法(按指定得格式传入数据)

    - (IBAction)buttonClick:(id)sender
    {
        [MgsSelectListView showInSuperView:self.view dataDic:@{@"yl":@"银联支付",@"zfb":@"支付宝支付",@"qq":@"QQ支付",@"wx":@"微信支付"} title:@"请选择支付类型" callback:^(BOOL success, NSString *keyString, NSString *showString) {
            _label.text = showString;
        }];
    }

    3.在回调部分可以得到选中的信息,做相应的处理操作!!

  • 相关阅读:
    怎样从外网访问内网数据库?
    怎样从外网访问内网Linux系统?
    怎样从外网访问内网Nginx?
    使用Holer外网SSH访问内网(局域网)Linux系统
    使用Holer远程桌面登录家里电脑和公司内网电脑
    使用Holer将本地端口映射到公网
    使用内网映射工具Holer将本地的Web应用映射到公网上访问
    算法学习笔记:关联分析(转)
    Python查看模块信息
    R语言中的因子
  • 原文地址:https://www.cnblogs.com/Mgs1991/p/5138881.html
Copyright © 2011-2022 走看看