我知道,我的头衔让人困惑,但我的问题也让我困惑。:-(
在类ReadMoreTextView中,我有一个NSAttributedString类型的变量,我可以填充它,但是当我读取它时,它是nil!?
好吧,我得用我糟糕的英语来声明这个和那个;-)
我想用Ilya Puchka的一个非常好的解决方案“ReadMoreTextView”来“压缩”一个大的UITextView:
我想使用NSAttributedString,因为我想用红色或蓝色“突出显示”Read more。
为此,我使用这个init:

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)
...
}

在那里
是“压缩”视图中的行距线数,
是NSAttributedString和
是一个标志,如果文本应该被修剪
下面是课堂:
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”,结果是零?!
因此,由于attributetrimtext中的nil,文本视图在显示时为空!:-(
我找不到原因。。。

最佳答案

如果您已将脚本中textView的类设置为ReadMoreTextView,则脚本将为您实例化ReadMoreTextView类并将其分配给textViewIBOutlet
在这行代码中:

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

您正在创建一个新的ReadMoreTextView并覆盖指向此新textView的出口指针。不幸的是,现在您没有与屏幕上的ReadMoreTextView交互。
不应覆盖ReadMoreTextView变量。您应该只使用它来读/写IBOutlet变量的属性。
textView.maximumNumberOfLines = 3
textView.attributedTrimText = attributedString
textView.shouldTrim = true

09-12 08:59