Swift中的NSAttributedString

时间:2014-12-20 15:42:07

标签: swift ios8 uipickerview

我的ViewController中有一个UIPickerView。起初我想使用attributedTitleForRow(),但我需要缩小字体大小,因此我使用了viewForRow...reusingView()。因为我不想重写attributedTitleForRow()的代码,所以我做了以下事情:

let attributedString = pickerView(
    pickerView, attributedTitleForRow: row, 
        forComponent: component)

之后我想设置newView的属性(UILabel.attributedText = attributedString我从上面的行中收到错误:pickerView(...) -> $T4 is not identical to其余的没有显示在我的屏幕上,但通常是休息只有UInt8。我不知道哪里出错了。任何帮助都会很棒:]

viewForRow()函数中的整个代码:

        var newView = view as? UILabel
        if newView == nil {
            newView = UILabel()
        }
        newView!.font = UIFont.systemFontOfSize(16.0)
        newView!.textColor = UIColor.blueColor()
        newView!.adjustsFontSizeToFitWidth = true
        newView!.minimumScaleFactor = 0.6
        newView!.attributedText = (
            pickerView(pickerView, attributedTitleForRow: row, 
                forComponent: component))!
        newView!.textAlignment = .Center
        return newView!

调用另一个pickerView函数的行不起作用 - 不仅仅是它现在在上面代码中的方式

1 个答案:

答案 0 :(得分:1)

使用self重写关键字,一切都会好起来:

newView!.attributedText = self.pickerView(
    pickerView, attributedTitleForRow:row, 
        forComponent:component)

这将允许您的代码编译。

原因显然是方法参数中的pickerView使您现有的pickerView...方法黯然失色。使用self消除歧义。

(但是,我担心这永远不会起作用,因为永远不会调用此代码。如果实现了attributedTitleForRow,可能会忽略viewForRow?您将需要进行实验并查看我的担忧是否合理。)