如何从外部源更新 uitextview。

Posted

技术标签:

【中文标题】如何从外部源更新 uitextview。【英文标题】:How to Updatie a uitextview from an external source. 【发布时间】:2017-01-04 23:21:34 【问题描述】:

我希望能够通过在我的视图中调用一个方法来更新我的 uitextview。使用此代码,我得到一个运行时错误:

Unexpectedly found nil while unwrapping an Optional value

如果我注释掉它运行的 vw.updateTerm(...) 行。最终,我想用从 BLE 和/或 http 请求更新的数据更新 uitextview。任何帮助或指导将不胜感激。

我的 Playground Swift 3 代码如下所示:

import UIKit
import PlaygroundSupport

public class TextViewController : UIViewController 

    public var textView : UITextView!

    override public func loadView() 
        textView = UITextView()
        textView.text = "Hello World!\nHello Playground!"

        self.view = textView
    

    func updateTerm(textToUpdate: String) 
        self.textView.text.append(textToUpdate)
    


let vw = TextViewController()
vw.updateTerm(textToUpdate: "here you go")

PlaygroundPage.current.liveView = vw

【问题讨论】:

【参考方案1】:

问题在于,当您尝试updateTerm 时,仍然没有调用loadView,这意味着loadView 中的textViewnil vw 实例。

textView 被声明为强制解包属性而言,任何尝试在它为nil(如您的情况)时使用它都会导致运行时错误。

您应该将其设为常规可选:

public var textView : UITextView?

override public func loadView() 
    textView = UITextView()
    textView?.text = "Hello World!\nHello Playground!"
    self.view = textView


func updateTerm(textToUpdate: String) 
    self.textView?.text.append(textToUpdate)

或者,例如,惰性属性(如果适合您的情况):

lazy public var textView = UITextView()

override public func loadView() 
    textView.text = "Hello World!\nHello Playground!"
    self.view = textView


func updateTerm(textToUpdate: String) 
    self.textView.text.append(textToUpdate)

更多信息可以在here找到。

【讨论】:

谢谢,该链接有助于更好地解释它。我使用了 Lazy 选项,它对运行时错误很有用。我添加了如下几行以添加到我的文本视图中,它会更新,但文本永远不会进入显示的文本视图。 [code]print(vw.textView.text) vw.updateTerm(textToUpdate: "\n你去 2") print(vw.textView.text)'code' 添加了这些代码行。看来我有 2 个 textView 实例,因为在操场上它附加到 1 个实例而不是正在显示的那个实例。我需要在课堂上做更多的事情吗?vw.updateTerm(textToUpdate: "\nhere you go") print(vw.textView.text) vw.updateTerm(textToUpdate: "\nhere you go 2") print(vw.textView.text)

以上是关于如何从外部源更新 uitextview。的主要内容,如果未能解决你的问题,请参考以下文章

试图从一个 Viewcontroller 中的 UILabel 获取 NSString 以放置在另一个 Viewcontroller 的 UITextView 中

UITextView insertText 调用 shouldChangeTextInRange: replacementText:

在启用滚动的堆栈视图中扩展 UITextView

如何通过点击外部来关闭 UITextView?

调整表格视图单元格以显示 UITextView 和 UIWebView

iOS6 和 UITableView 中的屏幕外 UITextView