How do I change the text color of UIPickerView with multiple components in Swift?

后端 未结 3 1548
天涯浪人
天涯浪人 2020-12-15 19:19

Below code will change the font colour of the picker view of all 3 components. However, it crash when I try to spin the wheel. I think it has to do with the didSelectRow f

相关标签:
3条回答
  • 2020-12-15 19:51

    Swift 4.0

    func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
        return NSAttributedString(string: pickerData[row], attributes: [NSAttributedStringKey.foregroundColor : UIColor.white])
    }
    
    0 讨论(0)
  • 2020-12-15 20:10

    Swift 3

    func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
            let attributedString = NSAttributedString(string: "YOUR STRING", attributes: [NSForegroundColorAttributeName : UIColor.white])
            return attributedString
        }
    
    0 讨论(0)
  • 2020-12-15 20:16

    The following pickerView:attributedTitleForRow:forComponent: method implementation should help you:

    func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
        let attributedString = NSAttributedString(string: "some string", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])
        return attributedString
    }
    

    Update

    If you want to use attributedString in multiple if or switch statements, the following UIViewController subClass example will help you:

    import UIKit
    
    class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
    
        @IBOutlet weak var picker: UIPickerView!
    
        let arrayOne = ["One", "Two", "Three", "Four", "Five", "Six"]
        let arrayTwo = ["Un", "Deux", "Trois", "Quatre", "Cinq", "Six"]
        let arrayThree = [1, 2, 3, 4, 5, 6]
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            picker.delegate = self
            picker.dataSource = self
        }
    
        func numberOfComponentsInPickerView(_: UIPickerView) -> Int {
            return 3
        }
    
        func pickerView(_: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            switch component {
            case 0:
                return arrayOne.count
            case 1:
                return arrayTwo.count
            case 2:
                return arrayThree.count
            default:
                return NSNotFound
            }
        }
    
        func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
            var attributedString: NSAttributedString!
    
            switch component {
            case 0:
                attributedString = NSAttributedString(string: arrayOne[row], attributes: [NSForegroundColorAttributeName : UIColor.redColor()])
            case 1:
                attributedString = NSAttributedString(string: arrayTwo[row], attributes: [NSForegroundColorAttributeName : UIColor.redColor()])
            case 2:
                attributedString = NSAttributedString(string: toString(arrayThree[row]), attributes: [NSForegroundColorAttributeName : UIColor.redColor()])
            default:
                attributedString = nil
            }
    
            return attributedString
        }
    
        func pickerView(_: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            switch component {
            case 0:
                println(arrayOne[row])
            case 1:
                println(arrayTwo[row])
            case 2:
                println(arrayThree[row])
            default:
                break
            }
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题