मैं बनाया एक कस्टम तत्व मैं फोन कर रहा हूँ Slide
. मैं एक LazyVGrid
कि प्रदर्शित कर रहा है मेरे Slide
तत्वों. मेरा मुद्दा यह है कि जब मैं अद्यतन डेटा सरणी है कि अपने ग्रिड का उपयोग कर रहा है, के Slide
तत्वों अद्यतन नहीं कर रहे हैं.
परिदृश्य:
उपयोगकर्ता पर क्लिक करता है, विकल्प बटन पर एक Slide
और परिवर्तन के Slide
रंग, मैं हूँ तो अद्यतन करने के डेटा सरणी लेकिन Slide
तत्व अद्यतन नहीं करता है के बावजूद किया जा रहा डेटा सही (मैं सत्यापित किया है इस को जोड़ने के द्वारा Text(slide.color)
में LazyVGrid
प्रदर्शित करता है जो नव सेट रंग उम्मीद के रूप में)
मेरा शक:
मैं मान रहा हूँ यह अद्यतन नहीं करता है, क्योंकि मैंने कुछ गलत किया है, में Slide
संरचना, मैं काफी हूँ के लिए नए SwiftUI तो मैं सीख रहा हूँ के रूप में मैं जाने के लिए. मैं यह भी उल्लेख करना आवश्यक है कि इस भार को प्रदर्शित करता है और सही ढंग से जब मैं पहली बार प्रदर्शन को देखने के लिए, केवल समस्या यह है कि अद्यतन नहीं करता है, जब मैं अद्यतन SlideStructure
.
यहाँ कोड है:
struct ShowSongFile : View {
@EnvironmentObject var SlideStructure : SlidesModel
@State var selectedSlide : SplaySlide? = nil
var columns = [GridItem(.adaptive(minimum: 320))]
var body: some View {
ScrollView {
LazyVGrid(columns: columns, alignment: .trailing, spacing: 20) {
ForEach(SlideStructure.SongSlides, id:\.id) { slide in
if slide.id == selectedSlide?.id {
Slide(IsSelected:true, SlideData: slide)
} else {
Slide(IsSelected:false, SlideData: slide)
.onTapGesture {
selectSlide(Slide: slide)
}
}
}
}.onAppear(perform: loadSelectedFile)
}
}
यहाँ स्लाइड फ़ाइल जो भी दिखाता है कि कैसे मैं स्थापित कर रहा हूँ रंग के लिए स्लाइड:
struct Slide : View {
@State var EnableSlideEditing : Bool? = false
@State var IsSelected : Bool = false
@State var SlideData : SplaySlide
@EnvironmentObject var SlideStructure : SlidesModel
var body : some View {
VStack {
Group{
VStack(alignment: .center) {
let editor = TextEditor(text: $SlideData.lyric)
.multilineTextAlignment(.center)
.padding()
let text = Text(SlideData.lyric)
.multilineTextAlignment(.center)
.frame(width: 320.0, height: 160.0)
if EnableSlideEditing ?? false {
editor
} else {
text
}
Group {
HStack {
Text(SlideData.slideType)
.padding(.leading, 5.0)
Spacer()
MenuButton(label: Image(systemName: "ellipsis.circle")) {
Button("Edit Slide Text", action: {EnableSlideEditing?.toggle()})
Divider()
Menu("Slide Type") {
Button("Verse", action: {SlideType(Type: "Verse", ColorHex: "#f57242")})
Button("Chorus", action: {SlideType(Type: "Chorus", ColorHex: "#0068bd")})
Button("Pre-Chorus", action: {SlideType(Type: "Pre-Chorus", ColorHex: "#02ad96")})
Button("Tag", action: {SlideType(Type: "Tag", ColorHex: "#ad027d")})
Button("Bridge", action: {SlideType(Type: "Bridge", ColorHex: "#02ad96")})
}
Menu("Transitions") {
Button("Option 1", action: {})
Button("Option 2", action: {})
}
Divider()
Button("Delete Slide", action: {})
Button("Duplicate Slide", action: {})
}
.menuButtonStyle(BorderlessButtonMenuButtonStyle())
.frame(alignment: .trailing)
.padding(.trailing, 5.0)
.buttonStyle(PlainButtonStyle())
}
}
.frame(width: 320, height: 20, alignment: .leading)
.background(Color.init(hex: SlideData.slideBorderColorHex))
}
}
.frame(width: 320, height: 180, alignment: .bottomLeading)
.background(IsSelected ? Color.accentColor : .black)
.cornerRadius(10)
}
}
func SlideType(Type:String, ColorHex: String) {
for (index, slide) in SlideStructure.SongSlides.enumerated() {
if slide.id == self.SlideData.id {
SlideStructure.SongSlides[index].slideBorderColorHex = ColorHex
SlideStructure.SongSlides[index].slideType = Type
ShowSongFile.main?.SongFile.slides = SlideStructure.SongSlides
ShowSongFile.main!.SongFile.SaveSongToDisk()
}
}
}
}
SlideStructure: (SlideModel)
class SlidesModel : ObservableObject {
@Published var SongSlides : [SplaySlide] = []
}