SwiftUI शीट गलत डेटा वाली शीट दिखाती है
मेरे पास एक सूची है जो 1, 2, और 3 को प्रदर्शित करती है। जब पाठ टैप किया जाता है तो ऐप टैप की गई संख्या के साथ एक शीट खोलता है। हालाँकि, यदि मैं दूसरी या तीसरी पंक्ति में पाठ को टैप करता हूं, तो शीट में प्रदर्शित संख्या अभी भी है। 1. मैं क्या गलत कर रहा हूं?
import SwiftUI
struct ContentView: View {
var numbers = [1, 2, 3]
@State private var shouldPresentSheet = false
var body: some View {
List(self.numbers, id: \.self) { number in
Text("number: \(number)").sheet(isPresented: self.$shouldPresentSheet) {
Text("This is sheet number \(number)")
}.onTapGesture {
self.shouldPresentSheet.toggle()
}
}
}
}
जवाब
pawello2222
आपको कई शीट के बजाय एक शीट बनाने की आवश्यकता है ।
यदि आप उपयोग करना चाहते हैं तो आप .sheet(isPresented:content:)
निम्न कार्य कर सकते हैं:
struct ContentView: View {
var numbers = [1, 2, 3]
@State private var selectedNumber: Int?
var body: some View {
List(numbers, id: \.self) { number in
Text("number: \(number)")
.onTapGesture {
self.selectedNumber = number
}
}
.sheet(isPresented: binding) {
Text("This is a sheet number \(self.selectedNumber ?? 0)")
}
}
var binding: Binding<Bool> {
.init(
get: { self.selectedNumber != nil },
set: { _ in }
)
}
}
वैकल्पिक रूप से आप उपयोग कर सकते हैं .sheet(item:content:)
:
struct Model: Identifiable {
let id: Int
}
struct ContentView: View {
var numbers = [1, 2, 3].map(Model.init)
@State private var selectedNumber: Model?
var body: some View {
List(numbers, id: \.id) { number in
Text("number: \(number.id)")
.onTapGesture {
self.selectedNumber = number
}
}
.sheet(item: $selectedNumber) { item in
Text("This is a sheet number \(item.id)")
}
}
}
संपादित करें
यदि आप उपयोग करने का निर्णय लेते हैं, तो आप इसमें .sheet(item:content:)
एक एक्सटेंशन जोड़ सकते हैं Int
(इसके बजाय एक कस्टम संरचना के अनुरूप बनाने के लिए Identifiable
):
extension Int: Identifiable {
public var id: Int { self }
}
Asperi के उत्तर में प्रस्तावित है ।