У меня есть список навигации с несколькими разделами и строками. Я выбираю строку foo, она переходит к желаемому виду. Однако, когда я возвращаюсь к корневому представлению, я не могу выбрать строку foo. Я нажимаю на строку foo, и ничего не происходит.
Я нажимаю на строку строки, и эта строка отправляет меня к ее виду. Вернуться к корневому виду. Тогда я не могу выбрать строку строки, но теперь работает строка foo.
Это ошибка в SwiftUI или разработанное поведение? Есть ли что-то, что мне нужно сделать, чтобы сбросить представления, когда я покидаю их?
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])
}
}
}
}
Вот еще один случай с той же проблемой. Я могу выбрать строку выбора формы только один раз. Если я вернусь к основному виду, а затем снова вернусь к этому виду, я снова смогу выбрать средство выбора.
Если я установлю для pickerStyle значение SegmentedPickerStyle (), я могу выбрать его несколько раз.
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
}
}
}
ShoppingItemRow