【iOS】封裝PickerView選擇器,快速實現-城市選擇||日期選擇||單行選擇

前幾天寫項目遇到選擇數據的情況,所以封裝了一下三種選擇器(單行數據選擇,日期選擇,城市選擇),都以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.lxweimin.com/p/578065eab5ab
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容