【发布时间】:2018-09-24 20:03:13
【问题描述】:
根据 Apple 的文档,有一个名为 pickerView(_:attributedTitleForRow:forComponent:) 的 UIPickerView 委托函数。但是,我试图让它工作,但我似乎在这里做错了什么。我希望有人可以帮助我。
为了简单起见,我有一个简单的程序,它在选择器视图的两个组件中显示两个数组的内容。该程序只是一个视图控制器和一个选择器视图。代码呈现给她:
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
}
}
选择器视图现在应该在 Bradley Hand 中显示标题,因此很容易发现它有效。 不幸的是,选择器视图没有显示属性字符串中的标题。委托方法返回的字符串是一个属性字符串,所以它应该可以工作。图片显示情况并非如此。我究竟做错了什么?
【问题讨论】:
-
您确定
font不是nil?您需要将字体名称而不是家族名称传递给UIFont初始化程序。 -
控制台记录了什么?此外,您可以通过使用类型声明字符串字典来避免强制转换。
-
@rmaddy
familyNames是 [String] -
@Carpsen90 是的,但是是family 的名字还是font 的名字?
-
哦,这是姓氏,我知道了
标签: ios swift uipickerview