GOOGLE ADS

среда, 13 апреля 2022 г.

Перейти к новому представлению с помощью SwiftUI

У меня есть базовое представление с кнопкой, использующей 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)
}
}
}
}


Решение проблемы

Это не должно было быть здесь лучшим ответом, а скорее альтернативным методом, если вам не нужна панель навигации. См. Ответ Джейка ниже, чтобы узнать, как это сделать с помощью NavigationView& NavigationLink. Надеюсь, это все еще полезно или укажет вам правильное направление.

Если вы просто пытаетесь получить NavigationLinkработу с Binding, вы можете использовать ту же NavigationLinkинициализацию, что и я, с isActiveпараметром привязки.

Впрочем, вернемся к ответу…

Я сделал модификатор представления для этого. Это также означает, что нет панели навигации. Вы можете назвать это так:

.navigate(to: MainPageView(), when: $willMoveToNextScreen)

Его можно прикрепить к чему угодно, поэтому я обычно прикрепляю его к концу тела, например:

@State private var willMoveToNextScreen = false
var body: some View {
VStack {
/*... */
}
.navigate(to: MainPageView(), when: $willMoveToNextScreen)
}

Код (не забудьте import SwiftUI):

extension View {
/// Navigate to a new view.
/// - Parameters:
/// - view: View to navigate to.
/// - binding: Only navigates when this condition is `true`.
func navigate<NewView: View>(to view: NewView, when binding: Binding<Bool>) -> some View {
NavigationView {
ZStack {
self
.navigationBarTitle("")
.navigationBarHidden(true)
NavigationLink(
destination: view
.navigationBarTitle("")
.navigationBarHidden(true),
isActive: binding
) {
EmptyView()
}
}
}
.navigationViewStyle(.stack)
}
}

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...