UIPickerView

使用场景

  • 通常在注册模块,通过自定义inputView来自定义键盘加一个UIDatePicker来实现日期的选择
  • 主要用来选择固定的内容,限制输入。

使用步骤

  • 与uitableview有点相似,需要实现数据源方法和代理方法

  • 数据源2个方法:

    • (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
      • 这个方法返回有多少列在pickerView中,component是列的意思
    • (NSInteger)pickerView:(UIPickerView *)pickerView
      numberOfRowsInComponent:(NSInteger)component
      • 这个方法返回在Compoent列中有多少行,需要明确告诉在第几列中有多少行,比如 if(component == 1) return 3 这样的句子,说明第2列中有3行.
  • 代理方法

    • (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row
      forComponent:(NSInteger)component
      • 这个方法是设置显示什么文字内容,在特定的第几行第几列显示返回的文字内容,会调用row*component次,每到一个坐标位置,就会调用,所以row相当于Y,component相当于X。
    • (UIView *)pickerView:(UIPickerView *)pickerView
      viewForRow:(NSInteger)row
      forComponent:(NSInteger)component
      reusingView:(UIView *)view
      • 这个方法设置返回一个uiview,可以结合xib和自定义控件来实现,返回一个自定义的View放在指定的component的row
    • (void)pickerView:(UIPickerView *)pickerView
      didSelectRow:(NSInteger)row
      inComponent:(NSInteger)component
      • 这个方法是当UIPickerView被滚动选中某一列中的某一行时候调用,调用时候会传滚动后被选中的component和row过来,然后可以在这个函数里面进行操作,比如选中后就马上更新数据调用[pickerView reloadComponet:1];

二级联动bug解决

  • 二级联动就是第一列选中某一行后,第二列现在指定的内容,比如选中省后展示那个省里面的城市,
  • 主要特征就是plist文件中,存的是字典,字典中包含数组。就是一列显示字典的名字,一列显示字典里面数组的内容。
  • 这个时候,如果两列同时滚动会出现bug,因为可能数组越界。
    • 这时候需要一个属性来存当前选中的省,然后在返回数据的代理方法中,用这个index去获取指定位置的城市。
    • reloadcomponent 会重新调用数据源的代理方法

你可能感兴趣的:(UIPickerView)