Seb
Seb

Reputation: 3215

Click on button is not opening the view

I am working on an app and in the guest screen, I have created 2 button to register and login

the button is defined as:

 Button( action: {
                RegisterLoginView(isLoginScreen: false)
            }){
                MyButtonView(stringOfButton: register, isDarkButton: true)
                    .padding(.leading, 10)
            }

First, Xcode complains that Result of 'RegisterLoginView' initializer is unused but my biggest concern is that when I press on the button, I thought that RegisterLoginView will be opened but nothing happened. Any idea ?

guest view:

var body: some View {
    VStack {
        TabView {
            GuestFlowImageTab(title: title1,
                              desc: desc1,
                              image: "houseprice")
            GuestFlowImageTab(title: title2,
                              desc: desc2,
                              image: "invest")
            GuestFlowFormTab()
        }
        .tabViewStyle(PageTabViewStyle())
        .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))
        
        HStack {
            Button( action: {
                RegisterLoginView(isLoginScreen: false)
            }){
                MyButtonView(stringOfButton: register, isDarkButton: true)
                    .padding(.leading, 10)
            }
            Button( action: {
                RegisterLoginView(isLoginScreen: true)
            }){
                MyButtonView(stringOfButton: login, isDarkButton: false)
                    .padding(.trailing, 10)

            }
        }

    } 

and the RegisterLoginView is defined as below:

struct RegisterLoginView: View {
let titleTxt = "My Realtor"
let emailTxt = "Email"
let passwordTxt = "Password"
let nameTxt = "Name"
let loginBtn = "Sign In"
let registerBtn = "Sign Up"

@State var isLoginScreen: Bool
@State private var name = ""
@State private var email = ""
@State private var password = ""

var body: some View {
    VStack() {
        Text(titleTxt)
        Image("iconhouseorange")
        if(isLoginScreen) { TextField(nameTxt, text: self.$name) }
        TextField(emailTxt, text: self.$email)
        TextField(passwordTxt, text: self.$password)
        Button(isLoginScreen ? loginBtn : registerBtn) {}
      }
   }
}

struct RegisterLoginView_Previews: PreviewProvider {
    static var previews: some View {
        RegisterLoginView(isLoginScreen: true)
    }
}

Thanks for your help

Upvotes: 1

Views: 76

Answers (1)

Raja Kishan
Raja Kishan

Reputation: 18914

You should need to use NavigationLink instead of a button for redirection.

NavigationLink(destination: RegisterLoginView(isLoginScreen: false)) {
    MyButtonView(stringOfButton: register, isDarkButton: true)
        .padding(.leading, 10)
}

Also, if your parent view (guest view) is not under navigation view then wrapped your view with navigation view.

Guest View

var body: some View {
    NavigationView {
        VStack {
         // --- Other code ----
        }
    }
}

Upvotes: 1

Related Questions