无法将数据存储到 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)
...
}
有
- 是"compressed"视图中前导线的数量,
- 是 NSAttributedString 并且
- 是一个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
我知道,我的标题令人困惑,但我的问题也让我感到困惑。 :-(
在 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)
...
}
有
- 是"compressed"视图中前导线的数量,
- 是 NSAttributedString 并且
- 是一个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