7

我创建了UIPickerView4 个组件。
我可以为其中的每个组件添加标题UIPickerView吗?

感谢您的任何建议

4

4 回答 4

8

Swift版本,基于@greentor 的回答并进行了一些改进:

var labelTexts = ["Months", "Weeks", "Days", "Hours", "Minutes"]

override func viewDidAppear(animated: Bool) {

    let labelWidth = itemPicker.frame.width / CGFloat(itemPicker.numberOfComponents)

    for index in 0..<labelTexts.count {
        let label: UILabel = UILabel.init(frame: CGRectMake(itemPicker.frame.origin.x + labelWidth * CGFloat(index), 0, labelWidth, 20))
        label.text = labelTexts[index]
        label.textAlignment = .Center
        itemPicker.addSubview(label)
    }

示例 UIPickerView 在 iPhone 上的弹出窗口中以纵向方向显示 在 iPhone 上以横向显示的弹出框内的 UIPickerView 示例

请注意,如果在 ViewWillAppear 或更早版本中调用,这可能无法正常工作,因为此时 UIPickerView 还不知道其框架尺寸。

于 2016-08-08T17:25:37.160 回答
5

我不时使用的另一种技术是将标题设为每列的第一行:

在此处输入图像描述

您当然需要增加行数..

于 2013-11-28T00:42:46.860 回答
4

我展示了 3 个组件,然后使用 UIView 显示位于每个组件上方的标题 (UILabel)(您可以轻松地为更多或更少的组件修改它):

-(void)labelForDays
{
    NSString *strDay = @"Days";
    float lblWidth = self.pickerDayHourMin.frame.size.width / self.pickerDayHourMin.numberOfComponents;
    float lblXposition = self.pickerDayHourMin.frame.origin.x;
    float lblYposition = (self.pickerDayHourMin.frame.origin.y);

    UILabel *lblDay = [[UILabel alloc] initWithFrame:CGRectMake(lblXposition,
                                                                lblYposition,
                                                                lblWidth,
                                                                20)];
    [lblDay setText:strDay];
    [lblDay setTextAlignment:NSTextAlignmentCenter];

    [self.view addSubview:lblDay];
}

然后是第二个组件的标签

-(void)labelForHours
{
    NSString *strHours = @"Hours";
    float lblWidth = self.pickerDayHourMin.frame.size.width / self.pickerDayHourMin.numberOfComponents;
    float lblXposition = self.pickerDayHourMin.frame.origin.x;
    float lblYposition = (self.pickerDayHourMin.frame.origin.y);

    UILabel *lblHours;
    if (self.pickerDayHourMin.numberOfComponents ==3)
    {
        lblHours = [[UILabel alloc] initWithFrame:CGRectMake((lblXposition + lblWidth),
                                                                    lblYposition,
                                                                    lblWidth,
                                                                    20)];
    }


    [lblHours setText:strHours];
    [lblHours setTextAlignment:NSTextAlignmentCenter];

    [self.view addSubview:lblHours];
}

最后是一个以第三个组件为中心的标签

-(void)labelForMinutes
{
    NSString *strMinute = @"Minutes";
    float lblWidth = self.pickerDayHourMin.frame.size.width / self.pickerDayHourMin.numberOfComponents;
    float lblXposition = self.pickerDayHourMin.frame.origin.x;
    float lblYposition = (self.pickerDayHourMin.frame.origin.y);

    UILabel *lblMinute;
    if (self.pickerDayHourMin.numberOfComponents ==3)
    {
        lblMinute = [[UILabel alloc] initWithFrame:CGRectMake((lblXposition + lblWidth + lblWidth),
                                                           lblYposition,
                                                           lblWidth,
                                                           20)];
    }


    [lblMinute setText:strMinute];
    [lblMinute setTextAlignment:NSTextAlignmentCenter];

    [self.view addSubview:lblMinute];
}
于 2014-04-03T11:58:53.007 回答
3

您可以在 UIPicker 视图上方使用 UIlabel,效果很好

于 2013-09-25T09:53:50.383 回答