SwiftUI Как изменить NavigationBarTitle и добавить кнопку из дочерней формы - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть mainview, который имеет 2 вкладки. Я разместил навигационную панель на главной странице, чтобы получить доступ к ее функциям в дочерних представлениях. Однако заголовок никогда не будет успешно назначен главному представлению.

Вторая цель - добавить кнопку на кнопку навигации из дочернего представления. Однако форма не отображает его.

Вот код. Не могли бы вы помочь мне изменить название в дочернем представлении и добавить кнопку в NavigationView из дочернего представления?

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView{
            MainView()
                .navigationBarTitle(Text("App Title"), displayMode: .inline)
        }

    }
}

struct MainView: View {
    var body: some View {
        TabView(){

                DashboardView() 
                .navigationBarTitle(Text("Dashboard"), displayMode: .inline)
                .tabItem{
                    //Image(systemName: "list.dash")
                    Image(systemName: "chart.pie")
                    Text("Dashboard")
            }.tag(0)


                AssignmentView() 
                .navigationBarTitle(Text("Assignments"), displayMode: .inline)

                .tabItem{
                    Image(systemName: "briefcase")
                    Text("Assignments")
            }.tag(1)


        }

    }
}

struct DashboardView: View {
    var body: some View {
        Text("Dashboard View")
            .navigationBarTitle(Text("Dashboard View Title"), displayMode: .inline)

    }
}

struct AssignmentView: View {
    var body: some View {
        Text("Assignment View")
            .navigationBarTitle(Text("Assignments View Title"), displayMode: .inline)
            .navigationBarItems(trailing: Button(action: {
                print("Dashboard button click")
            }) {
                Text("Submit")
            })
    }
}

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Я удалил NavView из MainView и добавил NavViews к подпредставлениям с помощью новой структуры NavigationTab.

struct NavigationTab<Title,   Content>: View where Title: StringProtocol,  Content: View {
    var title: Title
    var content: () -> Content

    var body: some View {
        NavigationView {
            content()
                .navigationBarTitle(Text(title), displayMode: .inline)

        }
    }
}

Элементы вкладок теперь выглядят так:

NavigationTab(title: "Dashboard" ) {
                    DashboardView()
                        .navigationBarItems(leading: Button(action: {
                            self.isDrawerOpen.toggle()
                        }) {
                            Image(systemName: "sidebar.left")
                        })
                }

                .tabItem{
                    Image(systemName: "chart.pie")
                    Text("Dashboard")
                }.tag(1)

Я решил начальную проблему добавления кнопки в NavView, реплицировав кнопку DrawerOpen на несколько вкладок и назначив одну и ту же переменную isDrawerOpen. .

Но у меня все еще есть вариант использования в процессе, когда мне нужно добавить кнопку в NavView.trailing для отправки. Есть ли способ добавить кнопку в подпредставление (например, DashboardView вызывает другое представление)?

0 голосов
/ 12 февраля 2020

Для правильной работы функций навигации в стеке просмотра должен быть только один NavigationView. Я предполагаю, что вам просто нужно удалить сначала NavigationView, потому что ваш MainView является TabView контейнером

struct ContentView: View {
    var body: some View {
        MainView()
    }
}

По крайней мере для меня такой вариант дает естественный внешний вид.

...