J'essaie d'appliquer le code de la réponse acceptée à cette sur la façon de faire en sorte qu'un champ de texte SwiftUI devienne un premier intervenant. Voici le code, copié de cette réponse, que j'ai essayé d'utiliser dans xcode :
struct CustomTextField: UIViewRepresentable {
class Coordinator: NSObject, UITextFieldDelegate {
@Binding var text: String
var didBecomeFirstResponder = false
init(text: Binding<String>) {
_text = text
}
func textFieldDidChangeSelection(_ textField: UITextField) {
text = textField.text ?? ""
}
}
@Binding var text: String
var isFirstResponder: Bool = false
func makeUIView(context: UIViewRepresentableContext<CustomTextField>) -> UITextField {
let textField = UITextField(frame: .zero)
textField.delegate = context.coordinator
return textField
}
func makeCoordinator() -> CustomTextField.Coordinator {
return Coordinator(text: $text)
}
func updateUIView(_ uiView: UITextField, context: UIViewRepresentableContext<CustomTextField>) {
uiView.text = text
if isFirstResponder && !context.coordinator.didBecomeFirstResponder {
uiView.becomeFirstResponder()
context.coordinator.didBecomeFirstResponder = true
}
}
}
L'exécution de ce code, cependant, me donne une erreur d'exécution, disant "Unable to simultaneously satisfy constraints" (Impossible de satisfaire simultanément les contraintes). L'erreur est illustrée ci-dessous.
dans makeUIView
dans updateUIView dans onEditingChanged 2020-08-14 16:02:48.445045-0600 OpenRussian [2965:122005] [LayoutConstraints] Impossible de satisfaire simultanément les contraintes. simultanément les contraintes. Il est probable qu'au moins une des contraintes de la liste suivante est une contrainte que vous ne voulez pas. Essayez ceci : (1) regardez chaque et essayez de trouver celle que vous n'attendez pas ; (2) trouvez le code qui a ajouté la ou les contraintes non désirées et corrigez-le. ( "<NSLayoutConstraint:0x600002580d20 'assistantHeight' TUISystemInputAssistantView:0x7fde585064a0.height == 44 (active)>", "<NSLayoutConstraint:0x600002591b30 'assistantView.bottom' TUISystemInputAssistantView:0x7fde585064a0.bottom == _UIKBCompatInputView:0x7fde51b78c50.top (active)>", "<NSLayoutConstraint:0x600002591ae0 'assistantView.top' V:|-(0)-[TUISystemInputAssistantView:0x7fde585064a0] (active, names : '|':UIInputSetHostView:0x7fde58518070 )>", "<NSLayoutConstraint:0x600002591720 'inputView.top' V:|-(0)-[_UIKBCompatInputView:0x7fde51b78c50] (active, names : '|':UIInputSetHostView:0x7fde58518070 )>" )
Tentera de se rétablir en brisant la contrainte <NSLayoutConstraint:0x600002591b30 'assistantView.bottom' TUISystemInputAssistantView:0x7fde585064a0.bottom == _UIKBCompatInputView:0x7fde51b78c50.top (active)>
Créer un point d'arrêt symbolique à UIViewAlertForUnsatisfiableConstraints afin d'identifier ce problème dans le débogueur. Les méthodes de la classe UIConstraintBasedLayoutDebugging sur UIView listées dans <UIKitCore/UIView.h> peuvent également être utiles.
Que puis-je modifier pour que cela fonctionne et pour éviter cette erreur d'exécution "unable to simultaneously satisfy constraints" ?