问:没有NavigationButton的导航

时间:2019-07-05 19:07:22

标签: navigation swiftui

我正在尝试在我的应用程序中创建一个导航菜单。当前,当我单击导航栏中的按钮时,出现一个演示模式。在那个模型中,我在列表中有一些按钮,但不幸的是,我不知道该如何工作。理想情况下,我希望按钮在单击时退出演示模式,并导航到特定视图(即,如果我在菜单中按“配置文件”,则希望显示“配置文件视图”)。我尝试使用导航按钮,但它始终显示后退按钮/不退出演示模式。

//View with button in nav bar

struct HomeView : View {
    @State var showNav: Bool = false
 var body: some View {
         NavigationView {
            List {
                Text("hi")
                }
                .navigationBarItems(leading:
                    Button(action: {
                        self.showNav = true
                    }) {
                        Image("Image")
                        .resizable()
                            .frame(width: 60, height:60)
                    }
            )
            }.presentation(showNav ? Modal(NavView(),
                                             onDismiss: { self.showNav = false }) : nil)}


//View With navigation controlls
struct NavView : View {

    @State var pressedHome: Bool = false
    @State var pressedProfile: Bool = false




    var body: some View {
            List{

                Button(action: {
                    self.pressedHome = true
                }) {
                    Text("Home")
                }

               Button(action: {
                    self.pressedProflie = true
                }) {
                    Text("Profile")
                }
    }


}

1 个答案:

答案 0 :(得分:1)

为了消除presented view,请在您的NavView内添加一个绑定属性var:-

struct NavView : View {
  @Binding var showNav: Bool
}

然后将其替换为下面的行

presentation(showNav ? Modal(NavView(),
                                             onDismiss: { self.showNav = false }) : nil)}

与此

presentation(showNav ? Modal(NavView(showNav: $showNav),
                                             onDismiss: { self.showNav = false }) : nil)}

然后在您的两个按钮操作中添加此行

Button(action: {
   self.pressedHome = true
   self.showNav.toggle()   //added this line
   }) {
      Text("Home")
  }
Button(action: {
   self.pressedHome = true
   self.showNav.toggle() //added this line
   }) {
      Text("Profile")
  }