SwiftUI में एक ही पंक्ति को दो बार नहीं चुन सकते


19

मेरे पास कई वर्गों और पंक्तियों के साथ एक नेविगेशन सूची है। मैं एक पंक्ति फू का चयन करता हूं, यह मेरे इच्छित दृश्य पर नेविगेट करता है। हालाँकि, जब मैं रूट दृश्य पर वापस जाता हूं, तो मैं पंक्ति फू का चयन नहीं कर सकता। मैं पंक्ति फू ट करता हूं और कुछ नहीं होता।

मैं पंक्ति पट्टी पर टैप करता हूं और वह पंक्ति मुझे इसके दृश्य पर भेजती है। मूल दृश्य पर वापस जाएँ। तब मैं पंक्ति पट्टी का चयन नहीं कर सकता, लेकिन अब पंक्ति फू काम करता है।

क्या यह स्विफ्टयूआई या डिज़ाइन किए गए व्यवहार में एक बग है? क्या कुछ है जब मुझे उनके छोड़ने पर विचारों को रीसेट करने की आवश्यकता होती है?

NavigationView {
            List {
Section(header: shoppingListData.lastItemSection.sectionHeader, footer: shoppingListData.lastItemSection.sectionFooter) {
            ForEach(0..<shoppingListData.lastItemSection.sectionRows.count) { index in
                ShoppingItemRow(shoppingListData: self.shoppingListData,
                                rowItem: self.shoppingListData.lastItemSection.sectionRows[index])
            }
        }
}
}

यहाँ एक ही समस्या के साथ एक और मामला है। मैं केवल एक बार फॉर्म की पिकर पंक्ति का चयन कर सकता हूं। अगर मैं रूट दृश्य पर वापस जाता हूं और फिर इस दृश्य पर वापस जाता हूं, तो मैं फिर से पिकर का चयन कर सकता हूं।

अगर मैं सेपरेडपिकरसेल्टी () को पिकरसेटेल सेट करता हूं, तो मैं इसे कई बार चुन सकता हूं।

struct ShoppingItemPage: View {
    @ObservedObject var shoppingListData: ShoppingListData
    @ObservedObject var shoppingItem: ShoppingItems
    var body: some View {
        Form {
            Section(header: Text("Packages")) {
                HStack {
                    Text("Quantity (\(shoppingItem.myUnit.myName))")

                    TextField("Quantity (\(shoppingItem.myUnit.myName))", value: $shoppingItem.stdQty, formatter: basicFormat)
                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        .keyboardType(.numbersAndPunctuation)

                    Toggle("Need", isOn: $shoppingItem.needed)
                }
                HStack {
                    Text("Item Name")
                    TextField("Item Name", text: $shoppingItem.myName, onEditingChanged: { (a) in
                        self.shoppingItem.modified()
                    }) {
                        self.shoppingItem.modified()
                    }.textFieldStyle(RoundedBorderTextFieldStyle())
                }


                Picker(selection: $shoppingItem.urgency, label: Text("Urgency")) {
                    ForEach(Ledgers.ReceiptUrgency.list(), id: \.rawValue) { urgency in
                        Text(urgency.description()).tag(urgency)
                    }
                }                
            }
        }.navigationBarTitle(Text(shoppingItem.myName))
    }
}

XCode संस्करण 11.2.1 (11B500) और iOS 13.3 बीटा चल रहा है।

अधिक जानकारी के लिए ShoppingItemRow जोड़ना

struct ShoppingItemRow: View {

    @ObservedObject var shoppingListData: ShoppingListData
    @ObservedObject var rowItem: ShoppingItems

    var id: UUID {
        return rowItem.uuidKey
    }

    var body: some View {
        NavigationLink(destination: ShoppingItemPage(shoppingListData: shoppingListData, shoppingItem: rowItem)) {
            HStack(alignment: .center) {
                VStack(alignment: .leading)  {
                    rowName
                    rowDescription
                    rowPremiumDescription
                }
                Spacer()
                VStack(alignment: .trailing) {
                    rowPrice
                    rowPremium
                }
            }.padding(3)
            }.background(premiumColor)
    }

    var rowName: Text {
        if let msp = rowItem.minStorePackage {
            return Text(msp.brandName).font(.body).fontWeight(.bold)
        }
        // fall through
        return Text(rowItem.myName).font(.body).fontWeight(.bold)
    }

    var rowPrice: Text {
        if let msp = rowItem.minStorePackage {
            let dq = msp.defQty
            let pr = msp.pkgCost(pkgQty: dq)
            return Text(pr.cash()).font(.body)
        } else if let mp = rowItem.minPackage {
            let dq = mp.defQty
            let pr = mp.pkgCost(pkgQty: dq)
            return Text(pr.cash()).font(.body)
        } else {
            return Text("rowPrice Test")
            // return Text("0").hidden() as! Text
        }
    }

    var rowPremium: Text? {
        if let msp = rowItem.minStorePackage {
            let dq = msp.defQty
            let pc = msp.premiumCents(pkgQty: dq)
            if pc == 0 {
                return Text("0").hidden() as? Text
            } else {
                return Text(pc.cash()).font(.caption)
            }
        } else {
            return Text("0").hidden() as? Text
        }
    }

    var rowDescription: Text? {
        if let msp = rowItem.minStorePackage {
            let dq = msp.defQty
            let unitText: String
            if msp.pkgInteger {
                if dq == 1 {
                    unitText = "\(msp.pkgSize.basicString()) \(rowItem.myUnit.myName)"
                } else {
                    unitText = "\(dq.basicString()) x [\(msp.pkgSize.basicString()) \(rowItem.myUnit.myName)]"
                }
            } else {
                unitText = "\((dq * msp.pkgSize).basicString()) \(rowItem.myUnit.myName)"
            }
            let thisText = "\(unitText) \(msp.costX()) (\(msp.stdPrice.cash())/\(rowItem.myUnit.myName))"
            return Text(thisText).font(.caption)
        } else {
            return Text("").hidden() as? Text
        }
    }

    var rowPremiumDescription: Text? {
        if let msp = rowItem.minStorePackage {
            let dq = msp.defQty
            let premium = msp.premiumCents(pkgQty: dq)
            if premium == 0 {
                return Text("Minimum price at \(shoppingListData.dataStack.currentReceipt.myStore!.longName).").font(.caption)
            } else {
                let mp = rowItem.minPackage!
                return Text("\(premium.cash()) cheaper at \(mp.myStore.longName)").font(.caption)
            }
        } else if let mp = rowItem.minPackage {
            let dq = mp.defQty
            let pc = "Minimum price \(mp.pkgCost(pkgQty: dq).cash()) (\(mp.stdPrice.cash()) \(rowItem.myUnit.myName)) at "
            let storeName = mp.myStore.longName
            return Text("\(pc)\(storeName)").font(.caption)
        } else {
            return Text("").hidden() as? Text
        }
    }

    var premiumColor: Color {
        if let msp = rowItem.minStorePackage {
            let dq = msp.defQty
            let pc = msp.premiumCents(pkgQty: dq)
            if pc == 0 {
                return Color.yellow
            } else {
                return Color.clear
            }
        } else {
            return Color.clear
        }
    }

}

क्या आप देखने के लिए कुछ नमूना डेटा प्रदान कर सकते हैं?
फुल्वियो

1
एक और उदाहरण जोड़ा।
adamek'

अधिक दिलचस्प यह है कि अंदर क्या हैShoppingItemRow
एस्परि

1
यह नेविगेशनलिंक के साथ एक बग है और छोटे नमूने में पुन: पेश करने के लिए बहुत आसान है। : मेरी पोस्ट देखें forums.developer.apple.com/message/395130 । कृपया फ़ीडबैक असिस्टेंट में इसे रिपोर्ट करें ताकि Apple नोटिस।
थॉमस वोस

1
मैंने फीडबैक असिस्टेंट में इसकी सूचना दी है।
adamek

जवाबों:


13

बग को iOS 13.3 बीटा में Apple द्वारा तय किया गया है। ध्यान रखें कि जिस समय आपने इसे टेस्ट किया था उस समय iOS 13.3 बीटा में था। यह iOS 13.2 में बग नहीं था, इसलिए यह अब चिंता की कोई बात नहीं है।

IOS 13.3 रिलीज़ के लिए अपडेट:

बग भौतिक उपकरणों पर तय किया गया है लेकिन अभी भी एमुलेटर पर मौजूद है।


डाउनलोड किया गया बीटा 4. हाँ यह तय है।
adamek

4
13.3 बीटा से बाहर है, लेकिन मुझे सिर्फ इस मुद्दे का सामना करना पड़ा। 13.3 (फ़ोन और पैड) चलाने वाले सभी सिमुलेटर पर होता है। अभी तक एक भौतिक उपकरण पर इसका परीक्षण नहीं किया गया है।
execor21

3

मुझे भी यही समस्या है, इस पोस्ट को देखें । समस्या केवल भौतिक iPad 9.7 इंच पर होती है। सिम्युलेटर में नहीं, और न ही मेरे iPhone पर।


Xcode: 11.3; iOS 13.3.1 मेरे लिए, सिम्युलेटर के माध्यम से काम नहीं करता है, लेकिन डिवाइस के साथ काम करता है।
फ्रेडरिक सी। ली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.