当 View 消失时, View 协调器/委托(delegate)是否有函数?
我正在尝试创建一个 TextView ,“自动保存”记录人们输入的核心数据。基本上,自上次 textViewDidChange 后,它只等待 2 秒,然后保存数据。
它使用一个简单的 bool 变量作为“队列”,以确保它不会在 2 秒内尝试多次保存。
这是代码:
struct BodyTextView: UIViewRepresentable {
@Environment(\.managedObjectContext) var managedObjectContext
@Binding var text: String
var note: Note
func makeUIView(context: Context) -> UITextView {
let textView = UITextView()
textView.delegate = context.coordinator
return textView
}
func updateUIView(_ textView: UITextView, context: Context) {
textView.text = text
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator : NSObject, UITextViewDelegate {
var textView: BodyTextView
var saveQueued: Bool = false
init(_ textView: BodyTextView) {
self.textView = textView
}
func textViewDidChange(_ textView: UITextView) {
self.textView.text = textView.text
if (!saveQueued) {
saveQueued = true
Timer.scheduledTimer(withTimeInterval: 2, repeats: false) {_ in
print("saving from textViewDidChange: " + textView.text)
self.textView.note.body = textView.text
saveContext(self.textView.managedObjectContext)
self.saveQueued = false
}
}
}
}
}
到目前为止效果很好。
我的问题是,如果 View 在 2 秒结束之前消失,它不会保存数据。我猜这是因为当 View 被关闭时,它会取消结构内的计时器。
我希望它在 BodyTextView
消失时也能保存。
像这样:
func textViewDidDissapear(_ textView: UITextView) {
print("saving from textViewDidDissapear: " + textView.text)
self.textView.note.body = textView.text
saveContext(self.textView.managedObjectContext)
}
我该怎么做?
最佳答案
SwiftUI.View 的生命周期方法是 View 本身的修饰符。因此,如果您想知道 View 何时消失,请添加 . onDisappear()对其进行修改。
关于ios - 查看协调者/委托(delegate)消失功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58924248/