美文网首页
【iOS】封装PickerView选择器,快速实现-城市选择||

【iOS】封装PickerView选择器,快速实现-城市选择||

作者: Teun丶 | 来源:发表于2017-12-07 12:41 被阅读0次

    前几天写项目遇到选择数据的情况,所以封装了一下三种选择器(单行数据选择,日期选择,城市选择),都以AlterController的方式Model到控制器,原理是和PickerView是一样的,城市选择涉及到了三级联动,同时也写了三级联动中数组越界的问题(当然如果使用模型的话,更容易避免).
    欢迎有兴趣的同学可以联系我邮箱liuqinghe66@gmail.com与我讨论

    Github.Demo地址 : https://github.com/TynnPassBy/TynnSelector

    下载后拖入项目,导入一个头文件即可:

    #import "AlterController.h"
    

    一.单行选择效果:

    singLine.gif
    单行效果实现代码:

    1.创建需要弹出的AlterController

    AlterController *pickerView = [[AlterController alloc]initWithTitle:@"选择单行数据" type:kTypeOfSingleLine];
        //设置数据
        pickerView.dataArray = @[@"波多野结衣",@"天海翼",@"小泽玛利亚",@"大桥未久"];
        //设置代理
        pickerView.delegate = self;
        [self presentViewController:pickerView animated:YES completion:nil];
    
        //selectedBtn是一个定义的属性,用于标记你所点击的按钮是哪个
        self.selectedBtn = sender;
    

    2.实现代理方法

    -(void)getResultFromPickView:(NSString *)result{
        [self.selectedBtn setTitle:result forState:UIControlStateNormal];
    }
    

    提示:

    • 创建AlterController时type类型要按照需求去填写,不同数据对应的type值也不一样,要当心填错

    二.日期选择效果:

    date.gif
    日期选择代码:

    1.创建需要弹出的AlterController

    AlterController *pickerView = [[AlterController alloc]initWithTitle:@"选择日期" type:kTypeOfDate];
        pickerView.dataArray = [self getDateData];
        pickerView.delegate = self;
        [self presentViewController:pickerView animated:YES completion:nil];
        
        //标记所选按钮
        self.selectedBtn = sender;
    

    2.加载日期数据

    //获取日期数据
    - (NSArray *)getDateData{
        NSInteger year = 1900;
        NSMutableArray *yearArray = [NSMutableArray array];
        for (NSInteger i = 0; i<130; i++) {
            NSString *newYear = [NSString stringWithFormat:@"%zd",year + i];
            [yearArray addObject:newYear];
        }
        NSInteger month = 0;
        NSMutableArray *monthArray = [NSMutableArray array];
        for (NSInteger i = 0; i<12; i++) {
            NSString *newMonth = [NSString stringWithFormat:@"%zd",month + i + 1];
            [monthArray addObject:newMonth];
        }
        NSMutableArray *totalArray = [NSMutableArray array];
        [totalArray addObject:yearArray];
        [totalArray addObject:monthArray];
        return totalArray;
    }
    

    3.实现代理方法

    -(void)getResultFromPickView:(NSString *)result{
        [self.selectedBtn setTitle:result forState:UIControlStateNormal];
    }
    

    三.城市选择效果:

    city.gif
    城市选择代码:

    1.创建需要弹出的AlterController

    AlterController *pickerView = [[AlterController alloc]initWithTitle:@"选择城市" type:kTypeOfCity];
        pickerView.dataArray = [self getCityData];
        pickerView.delegate = self;
        [self presentViewController:pickerView animated:YES completion:nil];
        
        //标记所选按钮
        self.selectedBtn = sender;
    

    2.加载城市数据

    //获取json中的城市数据
    - (NSArray *)getCityData{
        //province.json文件在demo中有,如果需要的话请大家下载demo哈,如果使用其他json或者XML文件可能出现显示数据错误哦
        NSString* path = [[NSBundle mainBundle] pathForResource:@"province" ofType:@"json"];
        NSString* cityNames = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        if (cityNames == nil) {
            NSLog(@"error:加载城市数据为空");
            return nil;
        }
        NSData *jsonData = [cityNames dataUsingEncoding:NSUTF8StringEncoding];
        NSError *err;
        NSArray *arrayCityNames = [NSJSONSerialization JSONObjectWithData:jsonData
                                                       options:NSJSONReadingMutableContainers
                                                         error:&err];
        if(err) {
            NSLog(@"json解析失败:%@",err);
            return nil;
        }
        return arrayCityNames;
    }
    

    3.实现代理方法

    -(void)getResultFromPickView:(NSString *)result{
        [self.selectedBtn setTitle:result forState:UIControlStateNormal];
    }
    

    四.总结

    • 希望喜欢的小伙伴star一个哈,更多源码可以下载demo,后续还会更新关于日期选择,DateFormatter会更全一点,可以关注一下,点个关注,感谢
    • 推荐参考文章:http://www.jianshu.com/p/578065eab5ab

    相关文章

      网友评论

          本文标题:【iOS】封装PickerView选择器,快速实现-城市选择||

          本文链接:https://www.haomeiwen.com/subject/fvcdixtx.html