ios - 查看协调员/代表消失功能?
问题描述
当视图消失时,视图协调器/委托是否有功能?
我正在尝试创建一个“自动保存”人们输入核心数据的文本视图。基本上,它自上次 textViewDidChange 后仅等待 2 秒,然后保存数据。
它为“队列”使用了一个简单的布尔变量,以确保它不会在这 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
}
}
}
}
}
到目前为止,这运作良好。
我的问题是,如果视图在 2 秒结束之前消失,则不会保存数据。我猜这是因为当视图被关闭时,它会取消结构中的计时器。
我希望它也能在BodyTextView
消失时保存。
像这样的东西:
func textViewDidDissapear(_ textView: UITextView) {
print("saving from textViewDidDissapear: " + textView.text)
self.textView.note.body = textView.text
saveContext(self.textView.managedObjectContext)
}
我该怎么做呢?
解决方案
SwiftUI.View 的生命周期方法是视图本身的修饰符。因此,如果您想知道视图何时消失,请添加 . onDisappear()修饰符。
推荐阅读
- c++ - 用 Xcode 中的文件做一个学校问题
- php - Eloquent ID & Foreign key
- c - 修改同一内存地址上的值如何删除以前的值?“关于 PC 模式操作的 OVERWRITTEN 概念”
- java - 是否可以使 JavaFX 中的 ImageView 响应?
- swift - 为什么 Apple 的枚举类型的打印方式与 Swift 的不同?
- c# - Unity3D - What file format should I store my replays
- node.js - nginx redirect www to non-www
- node.js - How to execute multiple queries to return only a single part of my data
- php - How to put array inside array in PHP?
- r - Embolden upper part of curve