SwiftUI(1.0)中的导航问题

时间:2020-08-14 03:43:10

标签: swiftui

首先我有NavigationView,并且不往回滑动,为什么在UIKit NavigationController中,为什么? 其次,如何为我的情况正确创建导航流: 我有AuthView(),SelectedLanguageView()和OnboardingView()。 首先,开始用户显示SelectedLanguageView(),然后显示OnboardingView(),最后显示AuthView() 用户不能使用OnboardingView()返回SelectedLanguageView()并使用AuthView()返回AuthView() 没有NavigationView,只是NavigationLink无法工作,为什么? 如果这不是第一次启动,并且没有用户授权,则显示AuthView(),否则,如果用户授权,则显示MainView(), MainView()包含4个项目的标签栏,每个项目都有NavigationView

@State private var navBarHidden = true

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
                
        let languagSettings = UserLanguageSettings()
        UserDefaults.standard.set(false, forKey: "isNotFirstLaunchApp")
        
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            if UserDefaults.standard.bool(forKey: "isNotFirstLaunchApp") == false {
                window.rootViewController = UIHostingController(rootView: OnboardingView(navBarHidden: $navBarHidden).environmentObject(languagSettings))
            } else {
                window.rootViewController = UIHostingController(rootView: AuthorizationView(navBarHidden: $navBarHidden.not, isAddNavView: true).environmentObject(languagSettings))
            }
            self.window = window
            window.makeKeyAndVisible()
        }
    }

如果未授权用户,则条件尚未添加

var isAddNavView: Bool = false

var body: some View {
        if isAddNavBar {
            return NavigationView {
                ZStack {
                    VStack {
                        Text("")
                    }
                }
            }
        } else {
            return ZStack {
                VStack {
                    Text("")
                }
            }
        }
    }

我有错误,如果返回NavigationView,如果删除NavigationView并返回ZStack,则可以。我认为有更好的解决方案。 想法?

NavigationLink(destination: SignInView(), isActive: $isShowingSignInView) {
                EmptyView()
            }
Button(action: {
        self.isShowingSignInView.toggle()
    }) {
        Text("isShowingSignInView")
    }

我这样使用的项目中的所有导航链接

下一步-我尝试了以下操作: 在所有项目中,我删除所有NavigationView并创建模式显示屏幕(.sheet) 在AuthorizationView()中,我有变量@State 例如,在AuthorizationView()上我有

@State var isShowRegistration: Bool = false

并点击按钮注册以显示流程注册包括4个屏幕,显示为.sheet

RegistrationView(registrationView: $isShowRegistration)
//screens below include @Binding var registrationView: Bool
VerificationView(registrationView: $registrationView)
SetupPasswordView(registrationView: $registrationView)
EndRegistrationViewAndAuthorization(registrationView: $registrationView)

在EndRegistrationViewAndAuthorization上,我有一个按钮,理想情况下,我需要关闭所有先前的屏幕并调用func Auth(),这将打开我带有标签栏的应用程序主屏幕,其中的每个项目都包含NavigationView。现在我的按钮动作{self.registrationView.toogle()}返回我RegistrationView(),但应该返回到AuthorizationView()

1 个答案:

答案 0 :(得分:0)

我有错误,如果返回NavigationView,如果删除NavigationView并返回ZStack,则可以。我认为有更好的解决方案。想法?

对于SwiftUI 1.0,以下方法应该起作用

int main()
{

    string a={'a','b','c'};

    string b={'c','d','e'};

    int res = makeAnagram(a, b);

    cout << res << "\n";

    return 0;
}