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
{
   returnself.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能滚动到的最大的时间 
 
posted @ 2015-06-25 00:10  邓小君  阅读(396)  评论(0编辑  收藏  举报