Fixed (in a bit ugly way) that iOS 14 crashes if after pressing back button any changes to list (form) are don't and therefore count cells changes
This commit is contained in:
parent
34d5877419
commit
a518960070
|
@ -51,6 +51,8 @@ struct TransferMoneyDialog: View {
|
||||||
|
|
||||||
@State private var didJustCorrectEnteredValue = false
|
@State private var didJustCorrectEnteredValue = false
|
||||||
|
|
||||||
|
@State private var doNotDoAnyChangesToUiAnymore = false
|
||||||
|
|
||||||
|
|
||||||
private var account: IBankAccount? {
|
private var account: IBankAccount? {
|
||||||
if (self.selectedAccountIndex < self.accountsSupportingTransferringMoney.count) {
|
if (self.selectedAccountIndex < self.accountsSupportingTransferringMoney.count) {
|
||||||
|
@ -118,7 +120,7 @@ struct TransferMoneyDialog: View {
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
LabelledUIKitTextField(label: "Recipient Name", text: $recipientName, focusOnStart: true, focusNextTextFieldOnReturnKeyPress: true,
|
LabelledUIKitTextField(label: "Recipient Name", text: $recipientName, focusOnStart: true, focusNextTextFieldOnReturnKeyPress: true,
|
||||||
isFocusedChanged: recipientNameisFocusedChanged, actionOnReturnKeyPress: handleReturnKeyPress, textChanged: enteredRecipientNameChanged)
|
isFocusedChanged: recipientNameIsFocusedChanged, actionOnReturnKeyPress: handleReturnKeyPress, textChanged: enteredRecipientNameChanged)
|
||||||
.padding(.bottom, 0)
|
.padding(.bottom, 0)
|
||||||
|
|
||||||
recipientNameValidationResult.map { validationError in
|
recipientNameValidationResult.map { validationError in
|
||||||
|
@ -133,7 +135,7 @@ struct TransferMoneyDialog: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
LabelledUIKitTextField(label: "Recipient IBAN", text: $recipientIban, autocapitalizationType: .allCharacters, focusNextTextFieldOnReturnKeyPress: true, isFocusedChanged: validateRecipientIbanOnFocusLost,
|
LabelledUIKitTextField(label: "Recipient IBAN", text: $recipientIban, autocapitalizationType: .allCharacters, focusNextTextFieldOnReturnKeyPress: true, isFocusedChanged: validateRecipientIbanOnFocusLost,
|
||||||
actionOnReturnKeyPress: handleReturnKeyPress, textChanged: recipientIbanisFocusedChanged)
|
actionOnReturnKeyPress: handleReturnKeyPress, textChanged: enteredRecipientIbanChanged)
|
||||||
|
|
||||||
recipientIbanValidationResult.map { validationError in
|
recipientIbanValidationResult.map { validationError in
|
||||||
ValidationLabel(validationError)
|
ValidationLabel(validationError)
|
||||||
|
@ -213,6 +215,7 @@ struct TransferMoneyDialog: View {
|
||||||
.alert(message: $transferMoneyResponseMessage)
|
.alert(message: $transferMoneyResponseMessage)
|
||||||
.fixKeyboardCoversLowerPart()
|
.fixKeyboardCoversLowerPart()
|
||||||
.showNavigationBarTitle("Transfer Money Dialog Title")
|
.showNavigationBarTitle("Transfer Money Dialog Title")
|
||||||
|
.customNavigationBarBackButton(cancelPressed)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -236,7 +239,11 @@ struct TransferMoneyDialog: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private func recipientNameisFocusedChanged(_ isFocused: Bool) {
|
private func recipientNameIsFocusedChanged(_ isFocused: Bool) {
|
||||||
|
if doNotDoAnyChangesToUiAnymore {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if isFocused == false {
|
if isFocused == false {
|
||||||
validateRecipientNameOnFocusLost()
|
validateRecipientNameOnFocusLost()
|
||||||
|
|
||||||
|
@ -283,13 +290,17 @@ struct TransferMoneyDialog: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private func recipientIbanisFocusedChanged(_ enteredIban: String) {
|
private func enteredRecipientIbanChanged(_ enteredIban: String) {
|
||||||
validateField($recipientIban, $recipientIbanValidationResult, $isValidRecipientIbanEntered) { inputValidator.validateIbanWhileTyping(ibanToTest: enteredIban) }
|
validateField($recipientIban, $recipientIbanValidationResult, $isValidRecipientIbanEntered) { inputValidator.validateIbanWhileTyping(ibanToTest: enteredIban) }
|
||||||
|
|
||||||
tryToGetBicFromIban(enteredIban)
|
tryToGetBicFromIban(enteredIban)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func validateRecipientIbanOnFocusLost(_ isFocused: Bool) {
|
private func validateRecipientIbanOnFocusLost(_ isFocused: Bool) {
|
||||||
|
if doNotDoAnyChangesToUiAnymore {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if isFocused == false {
|
if isFocused == false {
|
||||||
validateRecipientIbanOnFocusLost()
|
validateRecipientIbanOnFocusLost()
|
||||||
}
|
}
|
||||||
|
@ -357,10 +368,11 @@ struct TransferMoneyDialog: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func validateReference() {
|
private func validateReference() {
|
||||||
validateField($reference, $referenceValidationResult, $isValidReferenceEntered) { inputValidator.validateReference(referenceToTest: self.reference) }
|
validateField($reference, $referenceValidationResult, $isValidReferenceEntered) { inputValidator.validateReference(referenceToTest: self.reference) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private func validateField(_ newValue: Binding<String>, _ validationResult: Binding<ValidationResult?>, _ isValidValueEntered: Binding<Bool>, _ validateValue: () -> ValidationResult) {
|
private func validateField(_ newValue: Binding<String>, _ validationResult: Binding<ValidationResult?>, _ isValidValueEntered: Binding<Bool>, _ validateValue: () -> ValidationResult) {
|
||||||
|
|
||||||
if (didJustCorrectEnteredValue == false) {
|
if (didJustCorrectEnteredValue == false) {
|
||||||
let fieldValidationResult = validateValue()
|
let fieldValidationResult = validateValue()
|
||||||
|
|
||||||
|
@ -407,7 +419,7 @@ struct TransferMoneyDialog: View {
|
||||||
|
|
||||||
if (response.successful) {
|
if (response.successful) {
|
||||||
self.transferMoneyResponseMessage = Message(message: Text("Successfully transferred \(data.amount) \("€") to \(data.recipientName)."), primaryButton: .ok {
|
self.transferMoneyResponseMessage = Message(message: Text("Successfully transferred \(data.amount) \("€") to \(data.recipientName)."), primaryButton: .ok {
|
||||||
self.presentation.wrappedValue.dismiss()
|
self.closeDialog()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
else if response.userCancelledAction == false {
|
else if response.userCancelledAction == false {
|
||||||
|
@ -415,6 +427,18 @@ struct TransferMoneyDialog: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private func cancelPressed() {
|
||||||
|
// ugly, i know. iOS 14 crashes when after pressing cancel e.g. due to validation count cells changes -> don't do any changes or validation anymore after cancel navigation bar button has been pressed
|
||||||
|
doNotDoAnyChangesToUiAnymore = true
|
||||||
|
|
||||||
|
closeDialog()
|
||||||
|
}
|
||||||
|
|
||||||
|
private func closeDialog() {
|
||||||
|
presentation.wrappedValue.dismiss()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TransferMoneyDialog_Previews: PreviewProvider {
|
struct TransferMoneyDialog_Previews: PreviewProvider {
|
||||||
|
|
Loading…
Reference in New Issue