IOS中级篇 —— picKerView and DatePicKer
picKerView
PickerView的高度不能改,默认162,PickerView里面每行的高度 可以改
显示内容的三个方法
// pickerView 有多少组
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView
{
return self.foods.count;
}
{
return self.foods.count;
}
// pickerView 的 第component组 有 多少行
- (NSInteger)pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)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
// 第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];
{
// 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;
{
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];
// 刷新所有的组
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能滚动到的最大的时间