使用 SwiftUI 时在拆分视图上接收应用程序之间焦点更改的通知
Posted
技术标签:
【中文标题】使用 SwiftUI 时在拆分视图上接收应用程序之间焦点更改的通知【英文标题】:Receive notifications for focus changes between apps on Split View when using SwiftUI 【发布时间】:2021-02-10 14:06:01 【问题描述】:在 iPaOS 拆分视图中显示的应用程序或场景的焦点更改视图中接收通知时我应该注意什么?
当用户将焦点返回给应用程序时,我正在尝试更新视图的一些数据,如 here 所述。
谢谢。
【问题讨论】:
【参考方案1】:这里有一个解决方案,每当收到UIPasteboard.changedNotification
或更改scenePhase
时更新pasteDisabled
:
struct ContentView: View
@Environment(\.scenePhase) private var scenePhase
@State private var pasteDisabled = false
var body: some View
Text("Some Text")
.contextMenu
Button(action: )
Text("Paste")
Image(systemName: "doc.on.clipboard")
.disabled(pasteDisabled)
.onReceive(NotificationCenter.default.publisher(for: UIPasteboard.changedNotification)) _ in
updatePasteDisabled()
.onChange(of: scenePhase) _ in
updatePasteDisabled()
func updatePasteDisabled()
pasteDisabled = !UIPasteboard.general.contains(pasteboardTypes: [aPAsteBoardType])
【讨论】:
当应用程序进入后台时,scenePhase 似乎发生了变化,但当应用程序处于拆分视图中时,当应用程序之间的焦点发生变化时,scenePhase 不会发生变化。没有这个,我无法知道应用程序是否有很多焦点。以上是关于使用 SwiftUI 时在拆分视图上接收应用程序之间焦点更改的通知的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI之如何使用@EnvironmentObject在视图之间共享数据