【问题标题】:Can't store data to a var (property) of a class无法将数据存储到类的 var(属性)中
【发布时间】:2015-07-16 13:24:23
【问题描述】:

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

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

我想使用 Ilya Puchka 的恕我直言非常好的解决方案“ReadMoreTextView”来“压缩”一个大型 UITextView:

我想使用NSAttributedString,因为我想用红色或蓝色“突出显示”“阅读更多”。

为此我使用这个初始化:

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. 是“压缩”视图中的前导行数,
  2. 是 NSAttributedString 和
  3. 是一个标志,如果应该修剪文本

这是课程:

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属性TrimText”,结果是nil?!

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

找不到原因……

【问题讨论】:

    标签: xcode swift properties


    【解决方案1】:

    如果您已将 Storyboard 中 textView 的类设置为 ReadMoreTextView,则 Storyboard 会为您实例化 ReadMoreTextView 类并将其分配给 textView IBOutlet

    在这行代码上:

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

    您正在创建一个新的ReadMoreTextView 并覆盖指向这个新ReadMoreTextView 的出口指针textView。不幸的是,现在您没有与屏幕上的ReadMoreTextView 进行交互。

    您不应覆盖IBOutlet 变量。您应该只使用它来读取/写入 IBOutlet 变量的属性。

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

    【讨论】:

    • 呃,我的白痴 :-( 现在一切看起来都像预期的那样 :-) Ma any THX,vacawama!
    猜你喜欢
    • 2017-02-07
    • 2023-03-11
    • 1970-01-01
    • 2016-11-21
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多