美文网首页
UIPickerView 相关知识

UIPickerView 相关知识

作者: 爱喝农药de清凉 | 来源:发表于2017-05-16 14:59 被阅读263次

    转自:http://www.cocoachina.com/bbs/read.php?tid=182382

    UIPickerView直接继承了UIView,没有继承UIControl,因此,它不能像UIControl那样绑定事件处理方法,UIPickerView的事件处理由其委托对象完成。
    UIPickerView控件常用的属性和方法如下。

    Ø numberOfComponents:获取UIPickerView指定列中包含的列表项的数量。该属性是一个只读属性。
    Ø showsSelectionIndicator:该属性控制是否显示UIPickerView中的选中标记(以高亮背景作为选中标记)。
    Ø - numberOfRowsInComponent::获取UIPickerView包含的列数量。
    Ø - rowSizeForComponent::获取UIPickerView包含的指定列中列表项的大小。该方法返回一个CGSize对象。
    Ø - selectRow:inComponent:animated::该方法设置选中该UIPickerView中指定列的特定列表项。最后一个参数控制是否使用动画。
    Ø - selectedRowInComponent::该方法返回该UIPickerView指定列中被选中的列表项。
    Ø - viewForRow:forComponent::该方法返回该UIPickerView指定列的列表项所使用的UIView控件。

    UIDatePicker控件只是负责该控件的通用行为,而该控件包含多少列,各列包含多少个列表项则由UIPickerViewDataSource对象负责。开发者必须为UIPickerView设置

    UIPickerViewDataSource对象,并实现如下两个方法。
    Ø - numberOfComponentsInPickerView::该UIPickerView将通过该方法来判断应该包含多少列。
    Ø - pickerView:numberOfRowsInComponent::该UIPickerView将通过该方法判断指定列应该包含多少个列表项。

    如果程序需要控制UIPickerView中各列的宽度,以及各列中列表项的大小和外观,或程序需要为UIPickerView的选中事件提供响应,都需要为UIPickerView设置UIPickerViewDelegate委托对象,并根据需要实现该委托对象中的如下方法。

    Ø - pickerView:rowHeightForComponent::该方法返回的CGFloat值将作为该UIPickerView控件中指定列中列表项的高度。
    Ø - pickerView:widthForComponent::该方法返回的CGFloat值将作为该UIPickerView控件中指定列的宽度。
    Ø - pickerView:titleForRow:forComponent::该方法返回的NSString值将作为该UIPickerView控件中指定列的列表项的文本标题。

    Ø - pickerView:viewForRow:forComponent:reusingView::该方法返回的UIView控件将直接作为该UIPickerView控件中指定列的指定列表项。
    Ø - pickerView:didSelectRow:inComponent::当用户单击选中该UIPickerView控件的指定列的指定列表项时将会激发该方法。
    Interface Builder只支持为UIPickerView设置一个属性——Shows Selection Indicator,该属性用于控制是否显示UIPickerView中的选中标记(以高亮背景作为选中标记)。

    单列选择器

    对于单列选择器,只要控制UIPickerView的dataSource对象的numberOfComponentsInPickerView:方法返回1即可。

    下面创建一个单列选择器,首先创建一个Single View Application,使用Interface Builder打开应用的界面设计文件,并将一个UIPickerView拖入界面设计文件中,为在程序中访问该控件,需要将该控件绑定到picker IBOutlet属性。

    接下来开始修改控制器类,本例打算使用控制器类作为UIPickerView的dataSource和delegate,因此,程序需要让控制器类实现UIPickerViewDataSource、UIPickerViewDelegate两个协议。

    修改控制器类的实现代码,主要就是实现UIPickerViewDataSource、UIPickerViewDelegate两个协议中的必要方法,其代码如下。

    创建 代码:(思路:创建选择器,让他替换inputView,并在上面添加toolbar,在toolbar上添加 确定 空格 取消 三个 buttonItem)

    pragma mark - 选择器

    • (void)setupPickerView:(UITextField *)textField ofIndexPath:(NSIndexPath *)indexPath{

      UIPickerView * pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, JKScreenWidth, 125)];
      textField.inputView = pickerView;
      pickerView.backgroundColor = [UIColor whiteColor];
      pickerView.delegate = self;
      pickerView.dataSource = self;

      self.pickerView = pickerView;

    [self addButtonForToolbar:textField];
    

    }

    pragma mark - 日期 选择器

    • (void)setupDatePickerView:(UITextField *)textField {

      UIDatePicker * datePickerView = [[UIDatePicker alloc] init];
      datePickerView.datePickerMode = UIDatePickerModeDate;
      textField.inputView = datePickerView;

    }

    pragma mark - 选择器 添加 确定 按钮

    • (void) addButtonForToolbar:(UITextField *)textField{

      // 定义一个toolBar
      UIToolbar * toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, JKScreenWidth, 30)];

      // 设置style
      [toolbar setBarStyle:UIBarStyleBlack];

    // 定义两个flexibleSpace的button,放在toolBar上,这样完成按钮就会在最右边
    UIBarButtonItem * flexibleSpace =[[UIBarButtonItem  alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    
    // 完成
    UIBarButtonItem * doneButton = [[UIBarButtonItem alloc]initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(doneButtonClick)];
    
    // 取消
    UIBarButtonItem * cancelButton = [[UIBarButtonItem alloc]initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(doneButtonClick)];
    
    // 在toolBar上加上这些按钮
    NSArray * buttonsArray = [NSArray arrayWithObjects:cancelButton,flexibleSpace,doneButton,nil];
    
    [toolbar setItems:buttonsArray];
    
    //    [textView setInputView:topView];
    [textField setInputAccessoryView:toolbar];
    

    }

    代理方法:
    // 设置 pickerView 显示内容 字体 等

    • (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{

      UILabel * titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 70, 30)];
      titleLabel.textAlignment = NSTextAlignmentCenter;
      titleLabel.font = [UIFont systemFontOfSize:15];
      titleLabel.text = _sexArray[row];

      return titleLabel;

    }

    相关文章

      网友评论

          本文标题:UIPickerView 相关知识

          本文链接:https://www.haomeiwen.com/subject/zkrhxxtx.html