UIpickview使用 【简单封装了下】数组中可以是字典,字符串

原创 2016年08月31日 12:42:51

{/**值是字典 或是字符串的标志*/

    int  flag ;


}

/***获取单列中的标题数组*/

@property(strong,nonatomic)NSMutableArray *titlesArr;

/**传递的是重组数组*/



/**顶部背景视图*/

@property(strong,nonatomic)UIView *backTv;

/**底部背景视图*/

@property(strong,nonatomic)UIView *backBv;


/**选中的字符串*/


@property(strong,nonatomic)NSString *selecStr;

/**选中的ID*/

@property(strong,nonatomic)NSString *selecId;





@end


@interface CustomPickV ()<UIPickerViewDataSource,UIPickerViewDelegate>


{

    CGFloat view_w;

    CGFloat view_h;

    CGFloat row_h;

}


@end


@implementation CustomPickV


-(instancetype)initWithFrame:(CGRect)frame andSetValueWithArr:(NSArray *)Arr

{

    

    

    if (self=[super initWithFrame:frame]) {

        

        self.titlesArr=[[NSMutableArray alloc]init];

        view_w=frame.size.width;

        view_h=frame.size.height;

        

        

        if (Arr.count!=0&&Arr!=nil) {

            /**根据数组的大小 pickv赋高度*/

            row_h=Arr.count*65;

            for (id obj in Arr) {/**判断数组中的值类型*/

                if ([obj isKindOfClass:[NSDictionary class]]) {

                    flag=33;

                    NSDictionary *dic=(NSDictionary *)obj;

                   

                   /**将字典加入数组中*/

                    [self.titlesArr addObject:dic];

                    

                }

                

                /**如果是字符串类型 直接赋值 就好*/

                if ([obj isKindOfClass:[NSString class]]) {

                    flag=34;

                    self.titlesArr=Arr.mutableCopy;

                }

                

                

            }

            

        }

        else{

            /**如果数组为空 则不出现选择框*/

            return nil;

        }

        /**表示是字符串*/

        if (flag==34) {

             self.selecStr=self.titlesArr.firstObject;

            

        }

        if (flag==33) {/**字典中的值*/

            self.selecStr=self.titlesArr.firstObject[@"name"];

            self.selecId=self.titlesArr.firstObject[@"id"];

        }

       

        

        

        

        

        

        self.backgroundColor = [[UIColor colorWithRed:0 green:0 blue:0 alpha:0.45]colorWithAlphaComponent:0.35];/**设置父视图灰显子视图不变色*/

        [self addSubview:self.custompV];

        [self addSubview:self.backBv];

        [self addSubview:self.backTv];

        

        

        

    }

    return self;

    

    

    

}

/**标题*/


-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

{

    if (flag==33) {

//        return self.titlesArr.firstObject[@"name"];

        return self.titlesArr[row][@"name"];

    }

   else

       return self.titlesArr[row];

    

    

}



/**

 *

 *重新设置pickviewlab;

 *  @param pickerView

 *  @param row

 *  @param component

 *  @param view

 *

 *  @return pickv的显示文本

 */

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{

    UILabel* pickerLabel = (UILabel*)view;//强制转换成lab

    if (!pickerLabel){

        pickerLabel = [[UILabel alloc] init];

        

        pickerLabel.font = [UIFont systemFontOfSize:12.0];

        pickerLabel.adjustsFontSizeToFitWidth = YES;//让他适应文本的宽度

        [pickerLabel setTextAlignment:NSTextAlignmentCenter];//居中

        [pickerLabel setBackgroundColor:[UIColor clearColor]];

        [pickerLabel setFont:[UIFont boldSystemFontOfSize:15]];

        /**

         1  + systemFontOfSize

         2  + boldSystemFontOfSize

         3  + italicSystemFontOfSize

         

         1 中是系统的默认方法

         2 是字体  bold :醒目的;雄浑的;突出的,使用后会加粗字体

         3 字体为斜体 italic [i'tælik] n. 斜体,斜体字

         */

    }

    

    pickerLabel.text=[self pickerView:pickerView titleForRow:row forComponent:component];

    return pickerLabel;

}


/***多少列*/

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

{

    

    return 1;

    

    

}

/**

 *单元格点击事件

 *

 *  @param pickerView

 *  @param row

 *  @param component

 */

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

{

    

//    self.selecStr=self.titlesArr[row];

//    

//    

//    

//    [self.delegate customPickvSelect:self.selecStr];

    

    if (flag==33) {

    

        self.selecStr=self.titlesArr[row][@"name"];

        self.selecId=self.titlesArr[row][@"id"];

        

//        [self.delegate customPickvSelect:self.selecStr andselID:_selecId];

        

        

    }

   else

    

       CLog(@"wawawa%@",self.titlesArr[row]);

    

    self.selecStr=self.titlesArr[row];

 

    

    

    

    

}


/***单列里面有多少行*/

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

{

    

    return self.titlesArr.count;

}


/**点击时 此视图消失*/

-(void)backvTapAction

{

    

    [self.delegate customPickvSelect:self.selecStr andselID:self.selecId];

    

    /**点击完成之后出现动画 */

    [UIView animateWithDuration:0.8f delay:0 usingSpringWithDamping:0.9f initialSpringVelocity:0.7f options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionLayoutSubviews animations:^{

        self.alpha = 0.0;

        self.frame = CGRectMake(0, view_h/3.0,iphone_w , 250);

        

    } completion:^(BOOL finished) {

        /**移除*/

        [self removeFromSuperview];

        

    }];

    

    

}


/**

 *

 *

 *  @param pickerView

 *  @param component 每列

 

 *

 *  @return  宽度

 */


-(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component

{

    return 100;

}

/**格子的高度*/

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component


{

    

    return 65;

    

}


-(UIPickerView *)custompV

{

    if (!_custompV) {

        _custompV=[[UIPickerView alloc]initWithFrame:CGRectMake(0, view_h/3, view_w, row_h)];

        _custompV.dataSource=self;

        _custompV.delegate=self;

        _custompV.backgroundColor=[UIColor whiteColor];

        _custompV.showsSelectionIndicator=YES;

        _custompV.autoresizingMask = UIViewAutoresizingFlexibleWidth;

    }

    return _custompV;

    

}


-(UIView *)backTv

{

    if (!_backTv) {

        _backTv=[[UIView alloc]initWithFrame:Frame(0,0, view_w,view_h/3.0)];

        

        

        _backBv.backgroundColor=[UIColor whiteColor];

        _backBv.alpha=0.25;

        

        UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(backvTapAction)];

        [_backTv addGestureRecognizer:tap];

        

    }

    

    return _backTv;

    

}


-(UIView *)backBv

{

    if (!_backBv) {

        _backBv=[[UIView alloc]initWithFrame:Frame(0, view_h/3.0+row_h, view_w, view_h/2.0-row_h)];

        _backBv.backgroundColor=[UIColor whiteColor];

        _backBv.alpha=0.25;

        UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(backvTapAction)];

        [_backBv addGestureRecognizer:tap];

    }

    return _backBv;

    

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

如何自定义字典中的key

一般情况下用字典的时候,都是用NSString做为字典的key,其实key可以自定义的,只要是NSObject类型的就可以当key. 今天介绍一下如何自定义key. 首先当然是继承NSObject...
  • favormm
  • favormm
  • 2012年03月21日 18:00
  • 2424

在堆中创建数组是不是就可以用变量作为数组的下标呢?

在堆中创建数组是不是就可以用变量作为数组的下标呢? 举报|2013-02-21 00:207373733 | 分类:其他编程语言 | 浏览251次 #include using name...
  • u013176681
  • u013176681
  • 2014年10月25日 11:41
  • 878

数组、字典转为json字符串

+ (NSString *)dictionaryToJSONString:(NSDictionary *)dictionary { NSError *error = nil; NSD...
  • ZHUTAN_123
  • ZHUTAN_123
  • 2017年04月21日 09:43
  • 235

mysql数据字段属性

unsigned 声明无符号的数据类型。可是原数据存储类型容量变大一倍。如int -2的64次方到2的64次方-1 用unsifned可以是范围变成0-2的65次方zerofill只能在数据类型前导0...
  • i_moyu
  • i_moyu
  • 2017年08月08日 11:27
  • 58

C# 中的数组和字典问题

一 . 数组(List)1 . 创建数组 //创建数组 List list = new List(); // Example List 2 .向数组中添加元素值 list.Add(videoB...
  • qq_19678579
  • qq_19678579
  • 2017年08月04日 20:15
  • 585

Swift3.0 中 字符串、数组、和字典类型的赋值与复制行为

字符串、数组、和字典类型的赋值与复制行为 Swift 中,许多基本类型,诸如 String , Array 和 Dictionary 类型均以结构体的形式实现。这意味...
  • jeffasd
  • jeffasd
  • 2017年02月15日 14:31
  • 602

c#中 实现 字符串转字典数据 字符串转字典 数组字典转字符串

List> StringToListForDictionary(string value) { if (value.Length < 1) ...
  • chuan403082010
  • chuan403082010
  • 2017年07月06日 12:16
  • 1527

Python字典对象实现原理

字典类型是Python中最常用的数据类型之一,它是一个键值对的集合,字典通过键来索引,关联到相对的值,理论上它的查询复杂度是 O(1) : >>> d = {'a': 1, 'b': 2} >>> ...
  • dotedy
  • dotedy
  • 2015年12月27日 23:17
  • 1593

Python 为什么list不能作为字典的key?

Python 为什么list不能作为字典的key? Posted on 2017年1月12日 by laixintao 7 Comments 很多Python初学者经常会有这...
  • sinat_32547403
  • sinat_32547403
  • 2017年06月23日 09:18
  • 3509

循环结构及数组

循环结构 while循环/do..while循环while循环 while循环主体只有一个语句时,可以省略大括号。在while循环语句中只有一个判断条件,它可以是任何表达式。当判断条件的值为真,循环...
  • ForrestYuxx
  • ForrestYuxx
  • 2016年05月16日 19:20
  • 208
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UIpickview使用 【简单封装了下】数组中可以是字典,字符串
举报原因:
原因补充:

(最多只允许输入30个字)