[SwiftUI macOS 앱] NavigationView List 요소 삭제/맨 위에 요소 추가
우선은 삭제의 샘플입니다.
사이드 바 목록을 선택하는 동안 remove를 누르면 nothing이 표시됩니다.
ContentView.swiftimport SwiftUI
struct Person: Identifiable, Hashable {
var name: String
var id = UUID()
}
struct ContentView: View {
@State var persons = [
Person(name: "taro"),
Person(name: "yuki"),
Person(name: "hoge")
]
@State private var selectedPerson: Person?
var body: some View {
VStack {
Button("remove", action: {
print(self.selectedPerson)
if self.selectedPerson == nil {
return
}
self.persons.removeAll(where: {$0.id == self.selectedPerson!.id})
self.selectedPerson = nil
})
NavigationView {
List(persons, id: \.self, selection: $selectedPerson) { person in
Text(person.name)
}.frame(width: 150)
if selectedPerson != nil {
Detail(person: selectedPerson!)
} else {
Text("nothing").frame(maxWidth: .infinity, maxHeight: .infinity)
}
}.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}
struct Detail: View {
var person: Person
var body: some View {
Text(person.name).frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
더 추가해 보겠습니다.
정렬 순서를 고려하여 맨 위에 요소를 넣을 수 있습니다.
ContentView.swiftimport SwiftUI
struct Person: Identifiable, Hashable {
var name: String
var id = UUID()
var order: Int
}
struct ContentView: View {
@State var persons = [
Person(name: "taro", order: 2),
Person(name: "yuki", order: 1),
Person(name: "hoge", order: 0)
]
@State private var selectedPerson: Person?
var body: some View {
VStack {
HStack {
AddButton(persons: $persons, selected: $selectedPerson)
Button("remove", action: {
print(self.selectedPerson)
if self.selectedPerson == nil {
return
}
self.persons.removeAll(where: {$0.id == self.selectedPerson!.id})
self.selectedPerson = nil
})
}
NavigationView {
List(persons.sorted{$0.order > $1.order}, id: \.self, selection: $selectedPerson) { person in
Text(person.name)
}.frame(width: 150)
if selectedPerson != nil {
Detail(person: selectedPerson!)
} else {
Text("nothing").frame(maxWidth: .infinity, maxHeight: .infinity)
}
}.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}
struct AddButton: View {
@Binding var persons: [Person]
@Binding var selected: Person?
var body: some View {
Button("add", action: {
let names = ["foo", "bar", "baz", "tao", "tee"]
let newPerson = Person(name: names.randomElement()!, order: self.persons.count)
self.persons.append(newPerson)
self.selected = newPerson
})
}
}
struct Detail: View {
var person: Person
var body: some View {
Text(person.name).frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
Reference
이 문제에 관하여([SwiftUI macOS 앱] NavigationView List 요소 삭제/맨 위에 요소 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mochizukikotaro/items/369abbb8c65f65a73698
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import SwiftUI
struct Person: Identifiable, Hashable {
var name: String
var id = UUID()
}
struct ContentView: View {
@State var persons = [
Person(name: "taro"),
Person(name: "yuki"),
Person(name: "hoge")
]
@State private var selectedPerson: Person?
var body: some View {
VStack {
Button("remove", action: {
print(self.selectedPerson)
if self.selectedPerson == nil {
return
}
self.persons.removeAll(where: {$0.id == self.selectedPerson!.id})
self.selectedPerson = nil
})
NavigationView {
List(persons, id: \.self, selection: $selectedPerson) { person in
Text(person.name)
}.frame(width: 150)
if selectedPerson != nil {
Detail(person: selectedPerson!)
} else {
Text("nothing").frame(maxWidth: .infinity, maxHeight: .infinity)
}
}.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}
struct Detail: View {
var person: Person
var body: some View {
Text(person.name).frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
정렬 순서를 고려하여 맨 위에 요소를 넣을 수 있습니다.
ContentView.swift
import SwiftUI
struct Person: Identifiable, Hashable {
var name: String
var id = UUID()
var order: Int
}
struct ContentView: View {
@State var persons = [
Person(name: "taro", order: 2),
Person(name: "yuki", order: 1),
Person(name: "hoge", order: 0)
]
@State private var selectedPerson: Person?
var body: some View {
VStack {
HStack {
AddButton(persons: $persons, selected: $selectedPerson)
Button("remove", action: {
print(self.selectedPerson)
if self.selectedPerson == nil {
return
}
self.persons.removeAll(where: {$0.id == self.selectedPerson!.id})
self.selectedPerson = nil
})
}
NavigationView {
List(persons.sorted{$0.order > $1.order}, id: \.self, selection: $selectedPerson) { person in
Text(person.name)
}.frame(width: 150)
if selectedPerson != nil {
Detail(person: selectedPerson!)
} else {
Text("nothing").frame(maxWidth: .infinity, maxHeight: .infinity)
}
}.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}
struct AddButton: View {
@Binding var persons: [Person]
@Binding var selected: Person?
var body: some View {
Button("add", action: {
let names = ["foo", "bar", "baz", "tao", "tee"]
let newPerson = Person(name: names.randomElement()!, order: self.persons.count)
self.persons.append(newPerson)
self.selected = newPerson
})
}
}
struct Detail: View {
var person: Person
var body: some View {
Text(person.name).frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
Reference
이 문제에 관하여([SwiftUI macOS 앱] NavigationView List 요소 삭제/맨 위에 요소 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mochizukikotaro/items/369abbb8c65f65a73698텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)