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能滚动到的最大的时间