IOS中级篇 —— picKerView and DatePicKer

picKerView
PickerView 的高度不能改,默认 162 , PickerView 里面每行的高度 可以改

显示内容的三个方法
// pickerView 有多少组
- ( NSInteger )numberOfComponentsInPickerView:( UIPickerView *)pickerView
{
   
return self . foods . count ;
}
 
// pickerView component 多少行
- (
NSInteger )pickerView:( UIPickerView *)pickerView numberOfRowsInComponent:( NSInteger )component
{
    return [ self . foods [component] count ];
}

// component 组的第 row 行显示的内容是什么
- (
NSString *)pickerView:( UIPickerView *)pickerView titleForRow:( NSInteger )row forComponent:( NSInteger )component
{
   return self . foods [component][row];
}


// 返回一个view
- ( UIView *)pickerView:( UIPickerView *)pickerView viewForRow:( NSInteger )row forComponent:( NSInteger )component reusingView:( UIView *)view
{

   
// ios 7 8 里面
   
//    view 一直为空
   
// ios 6
   
//    if (view == nil) {
   
//            FlagView* flagView = [[NSBundle mainBundle] loadNibNamed:@"FlagView" owner:nil options:nil][0];
   
//    }
   
//    return  flagView;

   
FlagView * flagView = [ FlagView flagView ];
    flagView.flag = self.flags[row];
    return flagView;
}
// 返回每行的行高
- ( CGFloat )pickerView:( UIPickerView *)pickerView rowHeightForComponent:( NSInteger )component
{
   
return 60 ;
}
 
 
二级联运 一个bug
NSInteger proIndex = [pickerView selectedRowInComponent:0];    根据传进来的的组 得到当行选中的行
如果直接用这个proIndex 来得到下面二级的数据的话,那么在两组同时滚动时 就会出现bug
解决办法  申明一个属性来记录当前选中的组的行
    if (component == 0 ) {
        return [ self . provinces [row] name ];
    } else{ //你告诉我当前选中的是哪一行   
        NSInteger index = [ self . pickerView selectedRowInComponent : 0 ];
            // 我告诉你当前行有多少行下级内容
        return [self.provinces[index] cities][row]; 
    }
总结联动      如果是联运的话  那么 下一级的行数 一定是根据 上一级选中的行 来确定的

- ( void )pickerView:( UIPickerView *)pickerView  didSelectRow:(NSInteger)row  inComponent:( NSInteger )component
{
   
if (component == 0 ) {
       
// 刷新 pickerView

       
// 刷新某一组
        [pickerView
reloadComponent : 1 ];
       
// 刷新所有的组
        //        [pickerView reloadAllComponents];
        // 刷新后给记录行的属性赋值
        _selectedProIndex = row;
    }
}

    // 先取 你当前 在哪个省下
        //    取值的时候  就可以这样取了
        NSInteger proIndex = self . selectedProIndex ;
        return [self.provinces[proIndex] cities][row];


获取pickerView某一组当前选择的位置
NSInteger selectIndex = [self.pickerView selectedRowInComponent:i];

// pickerView的某一组滚动到某一行
[pickerView selectRow:0 inComponent:1 animated:YES];

// 刷新某一组
     [pickerView reloadComponent:1];
// 刷新所有的组
     [pickerView reloadAllComponents ];

DatePicker

//在给datepicker设置点击事件的时候  只能用addTarget方法 UIControlEventValueChanged 方式

[pciekr addTarget : self action : @selector (hehe:) forControlEvents : UIControlEventValueChanged ];
// 设置中文(locale属性)
datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];

// 设置显示格式
  datePicker.datePickerMode = UIDatePickerModeDate;
// xcode 6.3.1 中 在storyboard中拖datePicker控件直接修改Date为custom可能会出现无法滚动的情况 解决方法:重启模拟器

// storyboard中 Mode:datePicker显示的时间格式
// storyboard中 Locale:datePicker显示的语言
// storyboard中 Date:datePicker默认显示的时间
// storyboard中 Minimum Date能滚动到的最小的时间
// storyboard中 Maximum Date能滚动到的最大的时间 
 

你可能感兴趣的:(Datepicker)