如何在没有导航回溯的情况下启动SwiftUI视图?
我想将视图作为独立视图启动,而不使用导航层次结构。我不想使用NavigationButton的原因是我不想让用户返回调用表单 我尝试了以下类似于在SceneDeleteGate中启动第一个视图的方法,但什么也没有发生:如何在没有导航回溯的情况下启动SwiftUI视图?,swiftui,Swiftui,我想将视图作为独立视图启动,而不使用导航层次结构。我不想使用NavigationButton的原因是我不想让用户返回调用表单 我尝试了以下类似于在SceneDeleteGate中启动第一个视图的方法,但什么也没有发生: let appDelegate = UIApplication.shared.delegate as! AppDelegate let window = appDelegate.getNewWindow() window.rootViewControlle
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let window = appDelegate.getNewWindow()
window.rootViewController = UIHostingController(rootView: NewView())
window.makeKeyAndVisible()
我有一个合理的理由不使用导航用户界面,为了简短起见,我不做解释。我避免使用故事板,以尽可能保持简单
感谢您提供的任何解决方案建议。这就是我如何完成加载新根视图的过程 我在AppDelegate代码中添加了以下内容
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
...
func loadNewRootSwiftUIView(rootViewController: UIViewController)
{
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = rootViewController
self.window = window
window.makeKeyAndVisible()
}
}
并在我的表格中填写以下内容:
struct LaunchView : View {
var body: some View {
VStack {
Button(
action: {
LaunchLoginView()
},
label: {
Text("Login")
}
)
}
}
}
func LaunchLoginView(){
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let vContoller = UIHostingController(rootView: LoginView())
appDelegate.loadNewRootSwiftUIView(rootViewController: vContoller)
}
这是用于登录屏幕的吗?如果你只是因为不想让用户返回而不想进入导航路线,你可以禁用导航栏的“返回”按钮,甚至完全隐藏导航栏。@Fogmeister是的,这是用于登录屏幕的。我刚刚发现这是在模拟器中工作的,但不是在画布中,这非常有意义!我将把这个问题留待一会儿,看看是否有人有更好的办法。那样的话。。。你不应该这样过渡。你真的应该把整个屏幕换成一个新的。使用类似于
userLoggedIn
的环境对象,并根据该状态更新视图以显示登录屏幕或应用程序屏幕。在此处查看我的答案。。。我已经用SwiftUI Beta 5试用过了。它会编译,但不会发生任何事情,即没有新窗口。这种方法在Beta 5中仍然有效吗?我是否需要以某种方式将其连接到SceneDelegate中?我使用的是SwiftUI Beta 7,并且存在相同的问题。什么也没发生。有人知道如何处理这种情况吗?那真的是在利用迅捷的过渡状态;应用程序代理和RootViewController最终将被完全删除。而且,正如我所知,苹果并没有真正考虑在SwiftUI中进行全视图替换式导航(la,替换根视图控制器)。那太糟糕了!有条件地显示欢迎屏幕和登录屏幕或直接进入主主屏幕不需要“单页应用”思维,正如Fogmeister所建议的那样(这是目前唯一的解决办法):(