Ios 选择添加到SwiftUI列表的新项目

Ios 选择添加到SwiftUI列表的新项目,ios,swift,swiftui,Ios,Swift,Swiftui,使用Xcode 11.0,Beta 5 我有一个列表,它是从观察到的视图模型中的一组模型对象驱动的。列表中的每个项都有一个NavigationLink,其中包含一个接受模型作为参数的目标详细视图/视图模型 用户可以点击列表上方的条形按钮添加一个新项目,该项目将添加到视图模型的数组中,列表因此会重新加载,并显示新项目 我无法解决的问题是如何在列表中选择新项目,从而显示详细视图,而不需要用户手动选择。(这是一款具有分屏视图的iPad应用程序,因此需要选择它) 我尝试过以编程方式使用Navigatio

使用Xcode 11.0,Beta 5

我有一个
列表
,它是从观察到的视图模型中的一组模型对象驱动的。
列表中的每个项都有一个
NavigationLink
,其中包含一个接受模型作为参数的目标详细视图/视图模型

用户可以点击列表上方的条形按钮添加一个新项目,该项目将添加到视图模型的数组中,
列表
因此会重新加载,并显示新项目

我无法解决的问题是如何在列表中选择新项目,从而显示详细视图,而不需要用户手动选择。(这是一款具有分屏视图的iPad应用程序,因此需要选择它)

我尝试过以编程方式使用
NavigationLink
,但似乎没有任何效果。我查看了
列表的
选择
参数,但这也要求列表处于编辑模式,所以这不好


欢迎提出任何建议

以下解决方案使用
导航链接
选择
属性。这里的一个问题是,只有当前可见的项目才会被渲染,因此选择更向下的行不会产生任何效果

import SwiftUI

struct Item: Identifiable {
    let id = UUID()

    var title: String
    var content: String
}

struct ItemOverview: View {
    let item: Item

    var body: some View {
        Text(item.title)
    }
}

struct ItemDetailsView: View {
    let item: Item

    var body: some View {
        VStack{
            Text(item.title).font(.headline)
            Divider()
            Text(item.content)
            Spacer()
        }
    }
}

func randomString(length: Int) -> String {
    let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    return String((0..<length).map{ _ in letters.randomElement()! })
}

struct ListSelectionView: View {
    @State var items: [Item] = [
        Item(title: "Hello", content: "Content World"),
        Item(title: "Hey", content: "Content Du"),
    ]
    @State var selection: UUID? = nil

    func createItem() {
        let newItem = Item(title: randomString(length: 3), content: randomString(length: 10))
        self.selection = newItem.id
        self.items.append(newItem)
    }

    var body: some View {
        VStack{
            NavigationView{
                List(items) { item in
                    NavigationLink(destination: ItemDetailsView(item: item), tag: item.id, selection: self.$selection, label: {
                        Text(item.title)
                    })
                }
            }
            Button(action: {
                self.createItem()

            }) { Text("Add and select new item") }
            Divider()
            Text("Current selection2: \(String(selection?.uuidString ?? "not set"))")
        }
    }
}
导入快捷界面
结构项:可识别{
设id=UUID()
变量标题:字符串
变量内容:字符串
}
结构项概述:视图{
让项目:项目
var body:一些观点{
文本(项目名称)
}
}
结构项详细信息视图:视图{
让项目:项目
var body:一些观点{
VStack{
文本(item.title).font(.headline)
分隔器()
文本(项目.内容)
垫片()
}
}
}
func randomString(长度:Int)->String{
let letter letters=“ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789”

返回字符串((0..正如您所提到的,这在性能方面并不理想,并且我有一些问题,但它确实似乎是这样做的预期方式。希望在我们走向通用汽车的过程中,一些问题会得到解决。感谢您的帮助!