2013-09-25 58 views

回答

3

可以使用的UILabel的UIPicker观点,行之有效上述

6

我不时使用时间是使标题的第一行中的每一列的另外一个技术:

enter image description here

你需要增加当然行数..

+1

这不是一个好的解决方案,因为当您滚动顶行消失 – Honey

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]; 
} 
+0

这种工作和非常可控。足够用于这种微不足道的用例。 谢谢@greentor –

4

斯威夫特版本的标签,基于@ 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) 
    } 

sample UIPickerView inside a popover on iPhone in Portrait orientation sample UIPickerView inside a popover on iPhone in Landscape orientation

注意,如果调用viewWillAppear中或更早,因为UIPickerView不会知道在这一点上它的框架尺寸但,这可能无法正常工作。