Перейти к новому виду с помощью SwiftUI - PullRequest
3 голосов
/ 04 июня 2019

У меня есть базовый вид с кнопкой, использующей SwiftUI, и я пытаюсь представить новый экран / вид при нажатии кнопки.Как мне это сделать?Предполагается ли создать для этого представления делегата, который сообщит приложению SceneDelegate о представлении нового контроллера представления?

import SwiftUI

struct ContentView : View {
    var body: some View {
        VStack {
            Text("Hello World")
            Button(action: {
                //go to another view
            }) {
                Text("Do Something")
                    .font(.largeTitle)
                    .fontWeight(.ultraLight)
            }
        }
    }
}

Ответы [ 4 ]

6 голосов
/ 04 июня 2019

Я смог понять это после прохождения одного из обучающих проектов Apple.Ключ должен использовать NavigationView и NavigationButton:

import SwiftUI

struct ContentView : View {
    var body: some View {
        NavigationView {
            VStack {
                Text("Hello World")
                NavigationButton(destination: DetailView()) {
                    Text("Do Something")
                }
            }
        }
    }
}
5 голосов
/ 05 июня 2019

Вот еще один способ представить представление БЕЗ использования NavigationView. Это как у UIKit UIModalPresentationStyle.currentContext.

struct PresenterButtonView: View {
var body: some View {
    PresentationButton(Text("Tap to present"),
                       destination: Text("Hello world"))
}}
0 голосов
/ 11 июня 2019

Ответ на этот вопрос здесь неоднократно получен, но я просто хотел также продемонстрировать интересные аспекты SwiftUI, показывая, что если у вас есть представление A с данными, которые также будет использовать представление B, вы можете передать данные, создав @State в представление A и объявление той же переменной с объявлением @Binding в представлении B

struct ViewA : View {
    @State var myItems: [Items]
    var body: some View {
        NavigationView {
            VStack {
                NavigationButton(destination: ViewB(items: $myItems)) {
                    Text("Go To ViewB")
                }
            }
        }
    }
}
struct ViewB : View {
    @Binding var myItems: [Items]
    var body: some View {
        NavigationView {
            List{
                ForEach(myItems.identified(by: \.self)) {
                    Text($0.itemName)
                }
            }.navigationBarTitle(Text("My Items"))
        }
    }
}
0 голосов
/ 04 июня 2019

Необходимо создать DetailView, например, LandmarkDetail (), и вызвать кнопку NavigationButton с пунктом назначения LandmarkDetail ().Теперь был открыт подробный вид.

Для передачи значений на экран подробностей.отправив как ниже код.

struct LandmarkList: View {
    var body: some View {
        NavigationView {
            List(landmarkData) { landmark in
                NavigationButton(destination: LandmarkDetail()) {
                    LandmarkRow(landmark: landmark)
                }
            }
            .navigationBarTitle(Text("Landmarks"))
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...