2 | TimesPickerView = [[UIPickerView alloc] initWithFrame:CGRectZero]; |
3 | CGRect pickerRect = CGRectMake(w, h, x, y); |
4 | TimesPickerView.frame = pickerRect; |
5 | TimesPickerView.showsSelectionIndicator = YES; |
6 | [TimesPickerView setBackgroundColor:[UIColor clearColor]]; |
7 | TimesPickerView.autoresizingMask = UIViewAutoresizingFlexibleWidth; |
8 | TimesPickerView.delegate=self; //设置委托 |
9 | [self.view addSubview:TimesPickerView]; |
Picker View需要两个接口:DataSource和Delegate。
在定义接口的地方要有如下定义:
一个类必须至少实现下列方法:
01 | @interface SingleComponentPickerViewController : UIViewController |
02 | < uipickerviewdelegate , uipickerviewdatasource = "" > |
05 | #pragma mark Picker Data Source Methods |
07 | - (NSInteger) numberOfComponentsInPickerView: (UIPickerView *) pickerView |
12 | - (NSInteger) pickerView: (UIPickerView *)pickerView |
13 | numberOfRowsInComponent: (NSInteger) component |
15 | return [pickerData count]; |
18 | #pragma mark Picker Delegate Methods |
19 | - (NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger) row |
20 | forComponent:(NSInteger) component{ |
21 | return [pickerData objectAtIndex:row]; |
23 | </ uipickerviewdelegate ,> |
其中Data Source提供了数据,而Delegate则实际获取数据。
如果要接收某个Component被选择的消息,则要实现一个delegate方法:
01 | - (void) pickerView:(UIPickerView *) pickerView |
02 | didSelectRow: (NSInteger) row |
03 | inComponent: (NSInteger) component{ |
04 | if (component == kStateComponent) { |
05 | NSString *selectedState = [self.states objectAtIndex:row]; |
06 | NSArray *array = [stateZips objectForKey:selectedState]; |
08 | [picker selectRow:0 inComponent: kZipComponent animated:YES]; |
09 | [picker reloadComponent:kZipComponent]; |
14 | - (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { |
15 | [pickerViewsarray objectAtIndex:row]; |