use*_*186 4 quickaction swift swiftui
我是 Swift 的新手,一直在使用 SwiftUI,而不是 Storyboard。
我在 Info.plist 中设置了 UIApplicationShortcutItems,并有两个快速操作可以使用 launchOptions 显示警报。
我能够在 SceneDelegate.swift 中切换快速操作
func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
switch shortcutItem.type {
case "QuickAction1":
OneView() // What do I do to open this SwiftUI struct View?
break
case "QuickAction2":
SecondView() // What do I do to open this SwiftUI struct View?
break
default:
break
}
}
Run Code Online (Sandbox Code Playgroud)
使用 SwiftUI 从家庭快速操作打开特定视图的正确方法是什么?
内容视图.swift
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: OneView())
NavigationLink(destination: TwoView())
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是可能的方法(使用 Xcode 11.2 / iOS 13.2 测试)
1)添加AppSettings类来存储由快捷方式呈现的视图模式
class AppSettings: ObservableObject {
enum Mode {
case one
case two
}
@Published var mode: Mode? = nil
}
Run Code Online (Sandbox Code Playgroud)
2)使appSettings场景委托成员访问它ContentView并在快捷方式委托中并将其ContentView作为环境对象传递
let appSettings = AppSettings()
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let contentView = ContentView().environmentObject(appSettings)
// ...
Run Code Online (Sandbox Code Playgroud)
3)在快捷场景委托中激活对应模式
func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
switch shortcutItem.type {
case "QuickAction1":
appSettings.mode = .one
break
case "QuickAction2":
appSettings.mode = .two
break
default:
break
}
}
Run Code Online (Sandbox Code Playgroud)
4)ContentView根据选择的快捷方式有条件地制作当前链接
struct ContentView: View {
@EnvironmentObject var appSettings: AppSettings
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: OneView(),
tag: AppSettings.Mode.one,
selection: $appSettings.mode)
{ Text("To One") }
NavigationLink(destination: TwoView(),
tag: AppSettings.Mode.two,
selection: $appSettings.mode)
{ Text("To Two") }
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
766 次 |
| 最近记录: |