无法将数据存储到 class 的 var (属性)

Can't store data to a var (property) of a class

我知道,我的标题令人困惑,但我的问题也让我感到困惑。 :-(

在 class ReadMoreTextView 中,我有一个 NSAttributedString 类型的变量,我可以填充它,但是当我阅读它时,它是 nil!? 好的,我必须用我糟糕的英语来声明这个那个 ;-)

我想使用 Ilya Puchka 的恕我直言非常好的解决方案 "ReadMoreTextView" 到 "compress" 大型 UITextView:

我想使用 NSAttributedString,因为我想 "highlight" "Read more" 用红色或蓝色。

为此我使用这个初始化:

import UIKit
class ViewController: UIViewController {

@IBOutlet var textView: ReadMoreTextView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let text = "und ein neuer text Lorem ipsum dolor..."

    let attributedString = NSAttributedString(string:text as String)
    //                                                1)                   2)                         3)
    textView = ReadMoreTextView(maximumNumberOfLines: 3, attributedTrimText: attributedString, shouldTrim: true)
...
}

  1. 是"compressed"视图中前导线的数量,
  2. 是 NSAttributedString 并且
  3. 是一个Flag,如果Text应该被修剪

这里是 class:

class ReadMoreTextView: UITextView {
    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        scrollEnabled = false
        editable = false
    }

    convenience init(maximumNumberOfLines: Int, attributedTrimText: NSAttributedString?, shouldTrim: Bool) {
       self.init()
        self.maximumNumberOfLines = maximumNumberOfLines  // 1)
        self.attributedTrimText = attributedTrimText      // 2)
        println(attributedTrimText)                       // of course displays the attributedTrimText
        self.shouldTrim = shouldTrim                      // 3)
    }

    @IBInspectable
    var maximumNumberOfLines: Int = 0 {
        didSet { setNeedsLayout() }
    }

    var attributedTrimText: NSAttributedString? {
        didSet { setNeedsLayout() }
    }

    @IBInspectable
    var shouldTrim: Bool = false {
        didSet { setNeedsLayout() }
    }

然后我在shouldTrim处打个断点"po attributedTrimText"(上次调用),结果是nil?!

所以由于attributedTrimText中的nil,textView在显示的时候是空的! :-(

我找不到原因...

如果您在 Storyboard 中将 textView 的 class 设置为 ReadMoreTextView,那么 Storyboard 会为您实例化 ReadMoreTextView class并将其分配给 textView IBOutlet.

在这行代码中:

textView = ReadMoreTextView(maximumNumberOfLines: 3, attributedTrimText: attributedString, shouldTrim: true)

您正在创建一个新的 ReadMoreTextView 并覆盖指向这个新 ReadMoreTextView 的插座指针 textView。不幸的是,现在您没有与屏幕上的 ReadMoreTextView 互动。

您不应覆盖 IBOutlet 变量。您应该只将它用于 read/write IBOutlet 变量的属性。

textView.maximumNumberOfLines = 3
textView.attributedTrimText = attributedString
textView.shouldTrim = true