Swift 键入新文本后快速更新文本视图
我正在用swift 3制作一个应用程序 我有一个TableViewController,当我单击一行时,它会打开一个ViewController,其中有一个TextView。当我点击它时,我可以编辑它,但更改不会“保存”。当我返回列表并重新单击同一行时,文本返回到“默认”,我整天都在处理这个问题,我不知道如何解决它,我尝试了stackoverflow的解决方案,但只给出了更改文本颜色的解决方案。Swift 键入新文本后快速更新文本视图,swift,uitableview,tableview,Swift,Uitableview,Tableview,我正在用swift 3制作一个应用程序 我有一个TableViewController,当我单击一行时,它会打开一个ViewController,其中有一个TextView。当我点击它时,我可以编辑它,但更改不会“保存”。当我返回列表并重新单击同一行时,文本返回到“默认”,我整天都在处理这个问题,我不知道如何解决它,我尝试了stackoverflow的解决方案,但只给出了更改文本颜色的解决方案。 那我该怎么做呢 根据您到目前为止所说的,我只能假设您没有存储输入UITextView的新文本 未保存
那我该怎么做呢 根据您到目前为止所说的,我只能假设您没有存储输入UITextView的新文本 未保存更改的原因是,每次通过点击TableViewCell“打开”新的ViewController时,它都是该ViewController的全新实例。这意味着它没有输入文本视图中应该显示的内容,因此显示默认文本 但我该如何修复它呢 这将要求您在每次离开或关闭ViewController时保存TextView的文本。这是因为当您离开ViewController时,它将从内存中释放这意味着在那里编写的任何内容都不再存在。我建议将文本存储在TableViewController上的字符串数组中,这样可以使文本在应用程序的整个生命周期中保持不变 当我关闭应用程序时,文本消失
这需要数据持久化,为此,我建议阅读如何使用核心数据在多个应用程序生命周期中存储和持久化数据。实现这一点的方法有很多,其想法是在视图控制器的初始化中设置文本视图的文本 因此,您需要一个位置来保存用户输入的数据,然后在视图控制器的初始化中再次读取该数据 一种方法是使用singleton类保存数据,例如:
class SharedData {
static let instance = SharedData()
var textEnteredByUser: String?
}
现在,当用户输入文本时,将该文本保存在“SharedData”中的字符串中,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
textView.text = SharedData.instance.textEnteredByUser
}
SharedData.instance.textEnteredByUser=textView.text代码>
现在,我们保存了用户输入的数据,我们需要在文本视图中设置数据,然后数据才会显示在屏幕上,这可以在视图控制器的viewDidLoad
方法中实现,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
textView.text = SharedData.instance.textEnteredByUser
}
您还可以将数据保存在用户默认值中,而不是像这样保存在singleton类中:
override func viewDidLoad() {
super.viewDidLoad()
textView.text = SharedData.instance.textEnteredByUser
}
UserDefaults.standard.set(textView.text!,forKey:“textEnteredByUser”)
然后通过以下方式检索保存的文本:
UserDefaults.standard.string(forKey:“textEnteredByUser”)
注意:singleton解决方案在不同的视图控制器之间保持数据共享,但在关闭应用程序后不会保留数据,这是用户默认设置所做的。请向我们展示您迄今为止的尝试。您是如何更改文本颜色的?我在编辑部分尝试了此解决方案:但出现了错误:无法将nsrange类型的值转换为Range可能是因为您没有存储您目前在textView中输入的数据。请将关闭viewController时在textView中输入的数据存储在userdefault或plist或数据库中。当您来到或查看该viewController时,再次从该userdefault或plist或数据库向textView显示文本。