我知道,我的头衔让人困惑,但我的问题也让我困惑。:-(
在类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
类并将其分配给textView
IBOutlet
。
在这行代码中:
textView = ReadMoreTextView(maximumNumberOfLines: 3, attributedTrimText: attributedString, shouldTrim: true)
您正在创建一个新的
ReadMoreTextView
并覆盖指向此新textView
的出口指针。不幸的是,现在您没有与屏幕上的ReadMoreTextView
交互。不应覆盖
ReadMoreTextView
变量。您应该只使用它来读/写IBOutlet
变量的属性。textView.maximumNumberOfLines = 3
textView.attributedTrimText = attributedString
textView.shouldTrim = true