iOS学习笔记(十六)————选择器

/ 0评 / 0

乍一看,什么是PickerView啊,不看见效果谁都不知道啊,来看一下效果图。

pickerview

这就是pickView的效果,看着就是一个选择器的样子,来实现以下这个效果。


@interface ViewController (){
    NSMutableArray *_leftArr;
    NSMutableArray *_middleArr;
    NSMutableArray *_rightArr;
    NSArray *_arr1;
    UILabel *_lab;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
UIPickerView *view = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 50, 320, 400)];
    view.backgroundColor = [UIColor grayColor];
    view.dataSource = self;
    view.delegate = self;
    [self.view addSubview:view];
    
    
    //    设置数据源
    _arr1= @[@"河南",@"河北"];
    NSArray *arr2= @[@"南阳",@"周口"];
    NSArray *arr3= @[@"石家庄",@"保定"];
    NSArray *arr4= @[@"卧龙区",@"宛城区"];
    NSArray *arr5= @[@"太康县",@"鹿邑县"];
    NSArray *arr6= @[@"石家庄",@"石家庄"];
    NSArray *arr7= @[@"保定",@"保定"];
    
    //    把所有地小数组放到大地数组中
    _middleArr = [[NSMutableArray alloc] initWithObjects:arr2,arr3, nil];
    NSMutableArray  *rightArr1 = [[NSMutableArray alloc] initWithObjects:arr4,arr5, nil];
    NSMutableArray *rightArr2 = [[NSMutableArray alloc] initWithObjects:arr6,arr7, nil];
    //    把所有地小数组放到大地数组中
    _rightArr = [[NSMutableArray alloc] initWithObjects:rightArr1,rightArr2, nil];
}

#pragma mark -
#pragma mark pickerViewDatasourse
//返回多少列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 3;
}

//每列有多少行
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    //    返回第0区的行数
    if (component == 0) {
        return _arr1.count;
    }else if (component == 1 ) {
        //        首先地知道选择0区地第几行来确定 第1区地行数
        //        selectedRowInComponent  选择了区中第几行
        NSInteger currentRow = [pickerView selectedRowInComponent:0];
        
        //  通过currentRow(当前选中地行)来确定右变返回多少行
        //        从大数组中取出小地数组
        NSArray *arr = [_middleArr objectAtIndex:currentRow];
        return arr.count;
    }else{
        NSInteger currentRow = [pickerView selectedRowInComponent:0];
        NSInteger currentRow1 = [pickerView selectedRowInComponent:1];
        NSArray *arr = [_rightArr objectAtIndex:currentRow];
        NSArray *arr1 = [arr objectAtIndex:currentRow1];
        return arr1.count;
    }
}

//设置区中的每一行的标题
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    
    if (component == 0) {
        //    从数组中获取字符串对象
        //    通过传递的row 参数来取值
        NSString *title = [_arr1 objectAtIndex:row];
        return  title;
    }else if(component == 1){
        NSInteger currentRow = [pickerView selectedRowInComponent:0];
        NSArray *arr = [_middleArr objectAtIndex:currentRow];
        NSString *title = [arr objectAtIndex:row];
        return  title;
    }else{
        NSInteger currentRow = [pickerView selectedRowInComponent:0];
        NSInteger currentRow1 = [pickerView selectedRowInComponent:1];
        NSArray *arr = [_rightArr objectAtIndex:currentRow];
        NSArray *arr1 = [arr objectAtIndex:currentRow1];
        NSString *title = [arr1 objectAtIndex:row];
        return title;
    }
}

#pragma mark -
#pragma mark delegate
//已经选择了某个区地某一行
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    if(component == 0){
        //        刷新所有地区
        [pickerView reloadAllComponents];
        
        //        指定刷新某一个区
        //        [pickerView reloadComponent:1];
        
        //       指定选择某一个区地某一行
        [pickerView selectRow:0 inComponent:1 animated:YES];
        [pickerView selectRow:0 inComponent:2 animated:YES];
    }else if (component == 1){
        [pickerView reloadAllComponents];
        [pickerView selectRow:0 inComponent:2 animated:YES];
    }
}

而这里我为什么要提到DatePicker呢?其实DatePicker跟PickerView是很像的,但是他们可不一样,DatePicker就像是日期时间选择器之类的东西。

datepicker

我们来看看DatePicker是怎样使用的


@interface ViewController (){
    UILabel *_lab;
}
@end

@implementation ViewController

- (void)viewDidLoad{
    [super viewDidLoad];
	
    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 50, 320, 400)];
    //    设置样式
    datePicker.datePickerMode = UIDatePickerModeDateAndTime;
    
    [datePicker addTarget:self action:@selector(displayTime:) forControlEvents:UIControlEventValueChanged];
    
    [self.view addSubview:datePicker];
    
    
    _lab = [[UILabel alloc] initWithFrame:CGRectMake(0, 420, 320, 40)];
    _lab.backgroundColor = [UIColor grayColor];
    [self.view addSubview:_lab];
    
    
}

- (void)displayTime:(UIDatePicker *)datePicker{
//    获取datepicker当前选中的时间
    NSDate *date = datePicker.date;
    
//    时间转换器
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//    设置时间的格式
    [dateFormatter setDateFormat:@"yyyy-MM-dd:HH:mm"];
//    把时间转换成字符串
    _lab.text = [dateFormatter stringFromDate:date];
}

代码请查看 http://git.oschina.net/zcb1603999/LearningiOS

评论已关闭。