【问题标题】:Make the text in a pickerView in Swift strikethrough在 Swift 删除线的 pickerView 中制作文本
【发布时间】:2016-03-10 05:39:54
【问题描述】:

我成功地将支票号码作为文本添加到pickerView。但我想要曾经被删除的支票号码的文本。可以将标签文本更改为删除线的代码不适用于 pickerView 中的项目。你会在 pickerView 中看到类似“1023 {这是一个删除线}”的内容。有没有既有删除线又有普通字符的字体?有任何想法吗?

【问题讨论】:

    标签: swift uipickerview strikethrough


    【解决方案1】:

    所以看起来你需要为你的选择器视图使用 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
    }
    

    【讨论】:

    • 我确实使用了你提到的函数,但使用了我在link 找到的一个例子,它与我所拥有的完美配合。
    【解决方案2】:

    在看到http://makeapppie.com/tag/fonts-in-uipickerview/ 的示例后,我最终使用了以下内容

    只需将这个函数添加到现有代码中即可。我发现必须包含每个组件,否则除了 check Number 组件之外的组件将是空白的。

     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
    
    }
    

    【讨论】:

    • 很高兴它为您工作,但我的代码使用相同的基本选择器视图 api,并且更简单。 ;-)
    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 2016-12-21
    • 2011-05-08
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2016-02-22
    • 2023-03-07
    相关资源
    最近更新 更多