将 pickerView 中的文本设为 Swift 删除线

Make the text in a pickerView in Swift strikethrough

我成功地将支票号码作为文本添加到 pickerView。但我希望用于删除线的支票号码的文本。可以将标签文本更改为删除线的代码不适用于 pickerView 中的项目。您会在 pickerView 中看到类似“1023 { 这是删除线 }” 的内容。是否有同时具有删除线和普通字符的字体?有任何想法吗?

看来您需要为选择器视图使用 NSAttributedString 对象。

it looks like the only solution you might have available to you is to use the UIPickerViewDelegate method pickerView:viewForRow:forComponent:reusingView:.

如果您实施该方法,您将返回一个 UIView 对象,您可以在其中拥有一个使用属性字符串的 UILabel。

如果这是我的问题,我可能会这样做:

func pickerView(_ pickerView: UIPickerView,
              viewForRow row: Int,
            forComponent component: Int,
             reusingView view: UIView?) -> UIView
{
    // create a mutable attributed string
    let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: "Your String here")
    // add strikethrough attribute to the whole string
    attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

    // set up a label
    let pickerLabel = UILabel(frame: CGRectMake(0, 0, 200, 21))
    pickerLabel.center = CGPointMake(160, 284)
    pickerLabel.textAlignment = NSTextAlignment.Center

    // and set the contents to the atributedString
    pickerLabel.attributedText = attributeString

    return pickerLabel
}

http://makeapppie.com/tag/fonts-in-uipickerview/

看到示例后,我最终使用了以下内容

只需将此功能添加到现有代码中即可。我发现必须包含每个组件,否则除了支票号码组件之外的组件将是空白的。

 func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {


    let myHueMax = 0.50
    let myPickerFontSize: CGFloat = 20.0
    print("component in lable == \(component)")

    var pickerLabel = view as! UILabel!
    var gHue = Double()


    if view == nil {  //if no label there yet
        pickerLabel = UILabel()
        //color the label's background

        var hue:CGFloat

        if component == payeeComponent  {

            hue = CGFloat(row)/CGFloat(payeesAlphbeticalArray.count)

        }else if component == categoryComponent {

            hue = CGFloat(row)/CGFloat(categoriesAlphbeticalArray.count)

        }else{

             hue = CGFloat(row)/CGFloat(checkNumbersAlphbeticalArray.count)

        }


        pickerLabel!.backgroundColor = UIColor(hue: hue, saturation: 1.0, brightness: 1.0, alpha: 1.0)
        print("hue in label color == \(hue)")

        gHue = Double(hue)
    }

if component == payeeComponent  {



    let titleData = payeesAlphbeticalArray[row]

    var myTitle: NSAttributedString

    if ( gHue > myHueMax){
        myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: myPickerFontSize)!,NSForegroundColorAttributeName:UIColor.whiteColor()])
    }else{

        myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: myPickerFontSize)!,NSForegroundColorAttributeName:UIColor.blackColor()])
    }

    pickerLabel!.attributedText = myTitle
    pickerLabel!.textAlignment = .Center


    return pickerLabel!



}else if component == categoryComponent{

    let titleData = categoriesAlphbeticalArray[row]

    var myTitle: NSAttributedString

    if ( gHue > myHueMax){
        myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: myPickerFontSize)!,NSForegroundColorAttributeName:UIColor.whiteColor()])
    }else{

        myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: myPickerFontSize)!,NSForegroundColorAttributeName:UIColor.blackColor()])
    }


    pickerLabel!.attributedText = myTitle
    pickerLabel!.textAlignment = .Center


    return pickerLabel!



}else if component == checkNumberComponent {


    if checkNumbersAlphbeticalArray.isEmpty{

        return pickerLabel!

    }

    let titleData = checkNumbersAlphbeticalArray[row]

    var myTitle: NSAttributedString



    if isCheckNumberUsed(titleData){

        if ( gHue > myHueMax){
            myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: myPickerFontSize)!,NSForegroundColorAttributeName:UIColor.whiteColor(), NSStrikethroughStyleAttributeName: 1])
        }else{

            myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: myPickerFontSize)!,NSForegroundColorAttributeName:UIColor.blackColor(), NSStrikethroughStyleAttributeName: 1])
        }

    }else{

        if ( gHue > myHueMax){
            myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: myPickerFontSize)!,NSForegroundColorAttributeName:UIColor.whiteColor()])
        }else{

            myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: myPickerFontSize)!,NSForegroundColorAttributeName:UIColor.blackColor()])
        }
    }
    pickerLabel!.attributedText = myTitle
    pickerLabel!.textAlignment = .Center


    return pickerLabel!

    }

    return pickerLabel

}