У меня есть простое приложение NavigationSplitView с простой моделью SwiftData. Я пытаюсь использовать NavigationPath, чтобы вернуться к ThingListView, когда несколько слоев глубоко. Каждая статья, которую я нашел, и три разных кодера ИИ говорят, что этот код должен работать, но он не компилируется. В деталях: ниже строка «NavigationStack (Path: $ router.path) {» повышает ошибку », не может найти« $ router »в сфере сфера». < /P>
import SwiftUI
import SwiftData
import Observation
@main
struct ThingNavigationPathApp: App {
@State private var router = Router()
var body: some Scene {
WindowGroup {
ThingListView()
//.environment(router)
}
.modelContainer(for: [Thing.self])
.environment(router)
}
}
@Observable
class Router {
var path = NavigationPath()
func navigateToRoot() {
path = NavigationPath()
}
}
struct ThingListView: View {
@Environment(\.modelContext) private var context
@Query(sort: \Thing.name) private var things: [Thing]
@Environment(Router.self) private var router
@State private var selectedThing: Thing?
@State private var searchText = ""
var body: some View {
NavigationSplitView {
VStack {
Text("Things")
List(selection: $selectedThing) {
ForEach(things, id: \.self) { thing in
NavigationLink(value: thing) {
ThingRowView(thing: thing)
}
}
}
.searchable(text: $searchText)
Button(action: {
Task {
//do some setup
}
}, label: {
Text("Load Examples")
})
}
} detail: {
NavigationStack(path: $router.path) {
VStack {
if let selectedThing = selectedThing {
ThingDetailView(selectedThing: selectedThing)
} else {
PlaceholderView()
}
}
.navigationDestination(for: Thing.self) { thing in
ThingEditView(thing: thing)
}
}//nav
}
}
}
< /code>
и только для полноты: < /p>
@Model
final public class Thing {
var name: String = ""
var comment: String = ""
var imageData: Data?
var count: Int = 0
init(name: String, comment: String, imageData: Data? = nil, count: Int) {
self.name = name
self.comment = comment
self.imageData = imageData
self.count = count
}
static let one = Thing(name: "Thing One", comment: "fruit", count: 1)
static let two = Thing(name: "Thing Two", comment: "vegetable", count: 2 )
static let three = Thing(name: "Thing Three", comment: "protein", count: 3)
}//class thing
struct ThingDetailView: View {
@Environment(\.modelContext) private var context
@Environment(Router.self) private var router
let selectedThing: Thing
@State private var newUIImage: UIImage? = nil
@State private var disableSaveButton: Bool = false
@State private var shouldEditPhoto: Bool = false
var body: some View {
List {
Section {
NavigationLink(value: selectedThing) {
ThingRowView(thing: selectedThing)
}
} header: {
Text("Thing Name")
}
}
.navigationTitle(selectedThing.name)
}
}
< /code>
Любое руководство будет оценено. Xcode 16.2, iOS 18.2
Подробнее здесь: https://stackoverflow.com/questions/794 ... litview-do
Swiftui navigationPath в NavigationStack (Path: $ Path) в NavigationPlitView не компилируется ⇐ IOS
Программируем под IOS
1739578698
Anonymous
У меня есть простое приложение NavigationSplitView с простой моделью SwiftData. Я пытаюсь использовать NavigationPath, чтобы вернуться к ThingListView, когда несколько слоев глубоко. Каждая статья, которую я нашел, и три разных кодера ИИ говорят, что этот код должен работать, но он не компилируется. В деталях: ниже строка «NavigationStack (Path: $ router.path) {» повышает ошибку », не может найти« $ router »в сфере сфера». < /P>
import SwiftUI
import SwiftData
import Observation
@main
struct ThingNavigationPathApp: App {
@State private var router = Router()
var body: some Scene {
WindowGroup {
ThingListView()
//.environment(router)
}
.modelContainer(for: [Thing.self])
.environment(router)
}
}
@Observable
class Router {
var path = NavigationPath()
func navigateToRoot() {
path = NavigationPath()
}
}
struct ThingListView: View {
@Environment(\.modelContext) private var context
@Query(sort: \Thing.name) private var things: [Thing]
@Environment(Router.self) private var router
@State private var selectedThing: Thing?
@State private var searchText = ""
var body: some View {
NavigationSplitView {
VStack {
Text("Things")
List(selection: $selectedThing) {
ForEach(things, id: \.self) { thing in
NavigationLink(value: thing) {
ThingRowView(thing: thing)
}
}
}
.searchable(text: $searchText)
Button(action: {
Task {
//do some setup
}
}, label: {
Text("Load Examples")
})
}
} detail: {
NavigationStack(path: $router.path) {
VStack {
if let selectedThing = selectedThing {
ThingDetailView(selectedThing: selectedThing)
} else {
PlaceholderView()
}
}
.navigationDestination(for: Thing.self) { thing in
ThingEditView(thing: thing)
}
}//nav
}
}
}
< /code>
и только для полноты: < /p>
@Model
final public class Thing {
var name: String = ""
var comment: String = ""
var imageData: Data?
var count: Int = 0
init(name: String, comment: String, imageData: Data? = nil, count: Int) {
self.name = name
self.comment = comment
self.imageData = imageData
self.count = count
}
static let one = Thing(name: "Thing One", comment: "fruit", count: 1)
static let two = Thing(name: "Thing Two", comment: "vegetable", count: 2 )
static let three = Thing(name: "Thing Three", comment: "protein", count: 3)
}//class thing
struct ThingDetailView: View {
@Environment(\.modelContext) private var context
@Environment(Router.self) private var router
let selectedThing: Thing
@State private var newUIImage: UIImage? = nil
@State private var disableSaveButton: Bool = false
@State private var shouldEditPhoto: Bool = false
var body: some View {
List {
Section {
NavigationLink(value: selectedThing) {
ThingRowView(thing: selectedThing)
}
} header: {
Text("Thing Name")
}
}
.navigationTitle(selectedThing.name)
}
}
< /code>
Любое руководство будет оценено. Xcode 16.2, iOS 18.2
Подробнее здесь: [url]https://stackoverflow.com/questions/79440782/swiftui-navigationpath-in-navigationstackpath-path-in-navigationsplitview-do[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия