Согласно документации Apple, существует функция делегата UIPickerView, pickerView (_: attributeTitleForRow: forComponent :).Тем не менее, я пытался заставить это работать, но я, кажется, здесь что-то не так.Я надеюсь, что кто-нибудь может мне помочь.
Чтобы упростить задачу, у меня есть простая программа, которая представляет содержимое двух массивов в двух компонентах представления выбора.Программа представляет собой просто один контроллер вида и один вид выбора.Код представлен ей:
import UIKit
класс ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
var familyNames = [String]()
var fontName = ""
let firstArray = Array(0...99)
let secondArray = Array(0...99)
let fontCount = 0
@IBOutlet weak var samplePickerView: UIPickerView!
@IBOutlet weak var fontLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
familyNames = UIFont.familyNames.sorted()
let fontNames = UIFont.fontNames(forFamilyName: familyNames[17])
fontName = fontNames.first!
samplePickerView.delegate = self
samplePickerView.dataSource = self
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 2
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return firstArray.count
} else {
return secondArray.count
}
}
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
var rowTitle = ""
let font = UIFont(name: fontName, size: 18.0)
let stringDictionary = [NSAttributedString.Key.font: font]
switch component {
case 0:
rowTitle = String(format: "%03d", firstArray[row])
case 1:
rowTitle = String(format: "%03d", secondArray[row])
default:
break
}
let returnString = NSAttributedString(string: rowTitle, attributes: stringDictionary as [NSAttributedString.Key : Any])
print(returnString)
return returnString
}
}
В представлении средства выбора теперь должны отображаться заголовки в БрэдлиРука, так что легко определить, что сработало.К сожалению, представление выбора не представляет заголовки в указанной строке.Строка, возвращаемая методом делегата, является приписанной строкой, поэтому она должна работать.На фотографиях видно, что это не так.Что я делаю неправильно?