在Swift删除线中的pickerView中创建文本

时间:2016-03-10 05:39:54

标签: swift uipickerview strikethrough

我成功将支票号码作为文本添加到pickerView中。但是我想要用过的检查号码的文字是删除线。可以将标签文本更改为删除线的代码不适用于pickerView中的项目。你会得到类似" 1023 {这是一个删除线'"在pickerView中。是否有任何字体同时具有删除线和普通字符?有任何想法吗?

2 个答案:

答案 0 :(得分:2)

所以看起来你需要为你的选择器视图使用NSAttributedString对象。

it looks like the only solution you might have available to you是使用UIPickerViewDelegate方法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
}

答案 1 :(得分:1)

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

}