forked from shadowfacts/Tusker
Fix system autocomplete not working in Compose post body and CW
This commit is contained in:
parent
e763d48bf3
commit
8c4ef3caa6
|
@ -58,6 +58,10 @@ struct ComposeContentWarningTextField: UIViewRepresentable {
|
||||||
}
|
}
|
||||||
|
|
||||||
func textFieldDidChangeSelection(_ textField: UITextField) {
|
func textFieldDidChangeSelection(_ textField: UITextField) {
|
||||||
|
// Update text binding before potentially triggering SwiftUI view update.
|
||||||
|
// See comment in MainComposeTextView.Coordinator.textViewDidChangeSelection
|
||||||
|
text.wrappedValue = textField.text ?? ""
|
||||||
|
|
||||||
updateAutocompleteState(textField: textField)
|
updateAutocompleteState(textField: textField)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,7 @@ struct MainComposeWrappedTextView: UIViewRepresentable {
|
||||||
|
|
||||||
func updateUIView(_ uiView: UITextView, context: Context) {
|
func updateUIView(_ uiView: UITextView, context: Context) {
|
||||||
uiView.text = text
|
uiView.text = text
|
||||||
|
|
||||||
if let visibilityButton = visibilityButton {
|
if let visibilityButton = visibilityButton {
|
||||||
visibilityButton.image = UIImage(systemName: visibility.imageName)
|
visibilityButton.image = UIImage(systemName: visibility.imageName)
|
||||||
updateVisibilityMenu(visibilityButton)
|
updateVisibilityMenu(visibilityButton)
|
||||||
|
@ -227,6 +228,17 @@ struct MainComposeWrappedTextView: UIViewRepresentable {
|
||||||
}
|
}
|
||||||
|
|
||||||
func textViewDidChangeSelection(_ textView: UITextView) {
|
func textViewDidChangeSelection(_ textView: UITextView) {
|
||||||
|
// Update the value of the text binding.
|
||||||
|
// Sometimes, when the user accepts an autocomplete suggestion from the system keyboard, the system
|
||||||
|
// calls didChangeSelection before textDidChange, resulting in a loop where the updating the Tusker autocomplete
|
||||||
|
// state in didChangeSection (via updateAutocompleteState) triggers a new SwiftUI view update,
|
||||||
|
// but when that SwiftUI update is handled, the model still has the old text (from prior to accepting the autocomplete
|
||||||
|
// suggestion), meaning the UITextView's text gets set back to whatever it was prior to the system autocomplete.
|
||||||
|
// To work around that, we also update the text binding in didChangeSelection, to ensure that, if the autocomplete state
|
||||||
|
// does change and trigger a SwiftUI update, the binding will have the correct text that was produced by the system
|
||||||
|
// autocompletion.
|
||||||
|
text.wrappedValue = textView.text ?? ""
|
||||||
|
|
||||||
updateAutocompleteState()
|
updateAutocompleteState()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue