gpt4 book ai didi

Swiftui navigationLink macOS 默认/选中状态

转载 作者:行者123 更新时间:2023-12-03 09:19:59 25 4
gpt4 key购买 nike

我在 swiftui 中构建了一个 macOS 应用程序

我尝试创建一个 ListView ,其中第一个项目是预选的。我用navigationLink的“选定”状态尝试了它,但它没有用。

我几乎一无所知,希望你们能帮助我。

创建此 ListView 的代码如下所示。

//personList
struct PersonList: View {
var body: some View {
NavigationView
{
List(personData) { person in
NavigationLink(destination: PersonDetail(person: person))
{
PersonRow(person: person)
}
}.frame(minWidth: 300, maxWidth: 300)
}
}
}

(底部的其他 View )

这是我打开应用程序时的正常 View 。
appnormalstate
当我点击一个项目时,它会像这样打开。 这就是我在渲染此 View 时想要作为默认打开状态的状态。
appwantedstate

此 View 的代码如下所示:
//PersonRow

struct PersonRow: View {

//variables definied
var person: Person

var body: some View {

HStack
{
person.image.resizable().frame(width:50, height:50)
.cornerRadius(25)
.padding(5)

VStack (alignment: .leading)
{
Text(person.firstName + " " + person.lastName)
.fontWeight(.bold)
.padding(5)
Text(person.nickname)
.padding(5)
}
Spacer()
}
}
}


//personDetail

struct PersonDetail: View {

var person : Person

var body: some View {

VStack
{
HStack
{
VStack
{
CircleImage(image: person.image)
Text(person.firstName + " " + person.lastName)
.font(.title)
Text("Turtle Rock")
.font(.subheadline)
}
Spacer()
Text("Subtitle")
.font(.subheadline)
}
Spacer()
}
.padding()
}
}

提前致谢!

最佳答案

您可以定义与所选行的绑定(bind)并使用列表读取此选择。然后将选择初始化为人员数组中的第一个人。

请注意,在 macOS 上,您不要使用 NavigationLink ,而是使用 if 有条件地显示详细 View 您的 NavigationView 中的声明.

如果无法识别此人,则应添加 id: \.self在循环。这类似于:

struct PersonList: View {
@Binding var selectedPerson: Person?

var body: some View {
List(persons, id: \.self, selection: $selectedPerson) { person in // persons is an array of persons
PersonRow(person: person).tag(person)
}
}
}

然后在您的主窗口中:
struct ContentView: View {
// First cell will be highlighted and selected
@State private var selectedPerson: Person? = person[0]

var body: some View {
NavigationView {
PersonList(selectedPerson: $selectedPerson)

if selectedPerson != nil {
PersonDetail(person: person!)
}
}
}
}

您的 struct person 应该是 Hashable 以便在列表中被标记。如果您的类型足够简单,添加 Hashable 一致性就足够了:
struct Person: Hashable {
var name: String
// ...
}

有一个很好的教程使用相同的原理 here如果你想要一个更完整的例子。

关于Swiftui navigationLink macOS 默认/选中状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60139184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com