键入新文本后快速更新textview

时间:2017-06-22 16:14:53

标签: swift uitableview tableview

我正在快速制作应用程序3 我有一个TableViewController,当我点击一行时,它会打开一个ViewController,其中有一个TextView。当我点击它时,我可以编辑它,但更改不会“保存”。当我回到我的列表并重新点击同一行时,文本又回到了“默认”,我整天都遇到这个问题,我不知道如何解决它,我试过了来自stackoverflow的解决方案,但只提供更改文本颜色的解决方案。 那我该怎么办呢?

2 个答案:

答案 0 :(得分:0)

根据您到目前为止所说的内容,我只能假设您没有存储已输入UITextView的新文本。

未保存更改的原因是每次通过点击TableViewCell“打开”新的ViewController时,它都是该ViewController的全新实例。这意味着它没有输入到TextView中应该显示的内容,因此显示默认文本。

但我该如何解决?

这将要求您每次离开或关闭ViewController时都保存TextView的文本。这是因为当您离开ViewController时,它将从内存中释放。 这意味着在那里写的任何内容都不再存在。我建议将文本存储在TableViewController的字符串数组中,这应该允许文本在应用程序的生命周期内持续存在。

关闭应用时文字消失了!

这需要数据持久性,为此我建议您阅读如何使用Core Data在多个应用生命周期内存储和保存数据。

答案 1 :(得分:0)

有很多方法可以实现这一点,我们的想法是在视图控制器的初始化中设置文本视图的文本。

因此,您需要一个位置来保存用户输入的数据,然后在视图控制器的初始化中再次读取该数据。

一种方法是使用单例类来保存数据,例如:

class SharedData {

    static let instance = SharedData()

    var textEnteredByUser: String?
}

现在,当用户输入文本时,将该文本保存在“SharedData”中的字符串中,如下所示:

SharedData.instance.textEnteredByUser = textView.text!

现在,我们已经保存了用户输入的数据,我们需要在文本视图中显示数据然后才能在屏幕上显示,这可以通过视图控制器的viewDidLoad方法实现这样的:

override func viewDidLoad() {
    super.viewDidLoad()

    textView.text = SharedData.instance.textEnteredByUser
}

您还可以将数据保存为用户默认值而不是单身类,如下所示:

UserDefaults.standard.set(textView.text!, forKey: "textEnteredByUser")

然后以这种方式检索保存的文本:

UserDefaults.standard.string(forKey: "textEnteredByUser")

注意:单例解决方案保持不同视图控制器之间共享数据,但在关闭应用程序后不会保留数据,这就是用户默认操作。