SwiftUI এ দু'বার একই সারিটি নির্বাচন করা যায় না


19

আমার একাধিক বিভাগ এবং সারি সহ একটি নেভিগেশন তালিকা রয়েছে। আমি একটি সারি foo নির্বাচন করি, এটি আমার যে ভিউটিতে যায় তাতে নেভিগেট করে। যাইহোক, আমি যখন আবার রুট ভিউতে ফিরে যাই, আমি সারি foo নির্বাচন করতে পারি না। আমি সারি ফু ট্যাপ করি এবং কিছুই হয় না।

আমি সারি বারটি ট্যাপ করি এবং সেই সারিটি আমাকে তার দর্শনে প্রেরণ করে। রুট ভিউতে ফিরে যান। তারপরে আমি সারি বারটি নির্বাচন করতে পারি না, তবে এখন সারি ফু কাজ করে।

এটি কি সুইফটইউআই বা ডিজাইন করা আচরণের কোনও বাগ? আমি যখন ভিউগুলি ছেড়ে যাই তখন সেগুলি পুনরায় সেট করতে আমার কিছু করার দরকার আছে?

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))
    }
}

এক্সকোড সংস্করণ 11.2.1 (11B500) এবং আইওএস 13.3 বিটা চলছে।

আরও তথ্যের জন্য শপিং আইটেমরো যুক্ত করা হচ্ছে

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
যোগ করেছেন আরও একটি উদাহরণ।
অ্যাডামেক

আরও আকর্ষণীয় ভিতরে যা রয়েছেShoppingItemRow
Asperi

1
এটি নেভিগেশনলিঙ্ক সহ একটি বাগ এবং ছোট নমুনায় পুনরুত্পাদন করা খুব সহজ। আমার পোস্টটি দেখুন: forums.dePLer.apple.com/message/395130 । অ্যাপল বিজ্ঞপ্তি যাতে দয়া করে প্রতিক্রিয়া সহকারী এ এটি রিপোর্ট করুন।
থমাস ভস

1
আমি এটি ফিডব্যাক সহকারীতে রিপোর্ট করেছি।
অ্যাডামেক

উত্তর:


13

আইওএস ১৩.৩ বিটাতে অ্যাপল দ্বারা বাগটি ঠিক করা হয়েছে 4. মনে রাখবেন যে আপনি যখন পরীক্ষা করেছিলেন তখন আইওএস ১৩.৩ বিটাতে ছিল। এটি আইওএস 13.2 এ কোনও বাগ ছিল না, সুতরাং এটি নিয়ে আর উদ্বিগ্ন হওয়ার কিছু নেই।

আইওএস 13.3 রিলিজের জন্য আপডেট করুন:

বাগটি শারীরিক ডিভাইসে স্থির করা হয়েছে তবে এখনও এমুলেটরটিতে উপস্থিত রয়েছে।


বিটা ডাউনলোড হয়েছে Yes. হ্যাঁ এটি ঠিক করে দিয়েছে।
অ্যাডামেক

4
১৩.৩ বিটা ছাড়িয়ে গেছে, তবে আমি কেবল সমস্যার মুখোমুখি হয়েছি। 13.3 (ফোন এবং প্যাড) চলমান সমস্ত সিমুলেটরগুলিতে ঘটে। এটি কোনও দৈহিক ডিভাইসে এখনও পরীক্ষিত হয়নি।
এক্সিকিউটার 21

3

আমারও একই সমস্যা, এই পোস্টটি দেখুন । সমস্যাটি কেবল একটি শারীরিক আইপ্যাড 9.7 ইঞ্চিতে ঘটে occurs সিমুলেটারের সাথে নয়, না আমার আইফোনেও।


এক্সকোড: 11.3; আইওএস 13.3.1 আমার জন্য, সিমুলেটারের মাধ্যমে কাজ করে না তবে ডিভাইসের সাথে কাজ করে।
ফ্রেডরিক সি। লি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.