UIpickerView类似于UItableView,使用方法非常相似;
自定义MJPickerView,继承自UIpickerView;遵守两个协议:UIPickerDataSource和UIPickerDelegate;设置数据源和代理;
1、两个数据源方法
1、此方法返回的是列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 2;
}
2、此方法返回的是每一列的行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if (component == 0) {
return _listOne.count;
}
return _listTwo.count;
}
2、代理方法:
1、设置每列宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
if (self.listTwo) {
if (component == 1) {
return [UIScreen mainScreen].bounds.size.width - 120;
}
return 120;
}
return [UIScreen mainScreen].bounds.size.width;
}
2、设置每一列的每一行的显示数据,如果不实现这个代理方法,效果如下图所示:
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (component == 0) {
return [_listOne objectAtIndex:row];
} else {
return [_listTwo objectAtIndex:row];
}
}
3、获取选中的行列,得到数组中的数据
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (component == 0) {
_selectedStrFromOneList = [_listOne objectAtIndex:row];
} else {
_selectedStrFromTwoList = [_listTwo objectAtIndex:row];
}
}
没有实现titileForRow这个代理方法的效果:
3、设置为UITextField的inputView
self.cellTextFld.inputView = self.pickerV;
4、自定义toolBar,设置为UITextField的inputAccessoryView
UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(resignFirResponder)];
//占位用
UIBarButtonItem *selectItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"确定" style:UIBarButtonItemStyleDone target:self action:@selector(complete)];
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[toolBar setItems:@[cancelItem,selectItem,doneItem]];
self.cellTextFld.inputAccessoryView = toolBar;
剩下的数据传递了,就非常简单了;