Search code examples
swiftuipickerviewstrikethrough

Make the text in a pickerView in Swift strikethrough


I successfully added check numbers as text to a pickerView. But I wanted the text of the check numbers which had been used to be strikethrough. The code that can change a label's text to strikethrough does not work for items in a pickerView. You get something like "1023 { this is a strikethrough }" in the pickerView. Are there any fonts that have both strikethrough and normal characters? Any ideas?


Solution

  • I ended up using the following after seeing an example at http://makeapppie.com/tag/fonts-in-uipickerview/

    This function simply had to be added to existing code. I discovered that every component had to be included or the components other than the check Number component would be blank.

     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
    
    }