【问题标题】:How to set title above each component of a UIPickerView?如何在 UIPickerView 的每个组件上方设置标题?
【发布时间】:2017-12-01 13:11:14
【问题描述】:

我实现了一个包含 2 个组件的 UIPickerview。我想在每个上面设置一个标题。我该怎么做?

我不想在选择器上方放置一个单独的标签。

【问题讨论】:

  • UIPickerView 不支持在每个组件上方添加标签。您要么需要添加标签(您说出于某种原因不想这样做),要么按照@the4kman 链接中的建议进行操作。

标签: ios swift uipickerview


【解决方案1】:

我经常在我的UIPickerView 中添加一个只有一行的附加组件,并将该行的标题设置为下一个组件的标题。

例如对于“小时和分钟”UIPickerView

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 4 //2 headers and 2 values
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if component == 0 {
       return 1 //hours header
    } else if component == 1 {
       return 100 //hours
    } else if component == 2{
       return 1 //minutes header
    } else {
       return 4 //minutes
    }
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if component == 0 {
        return "Hours:" //header
    } else if component == 1 {
        return "\(row + 1)" //value
    } else if component == 2 {
        return "Minutes:" //header
    } else if component == 3 { 
        return "\(row * 15)" //value
    }
    return nil
}

结果会是这样的:

Result image

【讨论】:

    【解决方案2】:
     func setHeadersForPickerView() {
        let labelWidth = deliveryPicker.frame.width / CGFloat(deliveryPicker.numberOfComponents)
        for index in 0..<pickerHeaders.count {
            let label: UILabel = UILabel(frame: CGRect(x: deliveryPicker.frame.origin.x + (labelWidth * CGFloat(index)), y: 10, width: labelWidth + 40, height: 20))
            label.text = pickerHeaders[index]
            label.textAlignment = .center
            deliveryPicker.addSubview(label)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多