@@ -315,11 +315,6 @@ extension ResponsiveTextField: UIViewRepresentable {
315315 /// first responder.
316316 ///
317317 public func updateUIView( _ uiView: UITextField , context: Context ) {
318- guard context. coordinator. shouldUpdateView else {
319- context. coordinator. shouldUpdateView = true
320- return
321- }
322-
323318 uiView. isEnabled = isEnabled
324319 uiView. isSecureTextEntry = isSecure
325320 uiView. returnKeyType = returnKeyType
@@ -337,13 +332,22 @@ extension ResponsiveTextField: UIViewRepresentable {
337332 default :
338333 // If the current responder state matches the demand then
339334 // the demand is already fulfilled so we can just reset it.
340- context. coordinator. firstResponderDemandFulfilled ( )
335+ resetFirstResponderDemandAfterViewUpdate ( )
336+ }
337+ }
338+
339+ fileprivate func resetFirstResponderDemandAfterViewUpdate( ) {
340+ // Because the first responder demand will trigger a view
341+ // update when it is set, we need to wait until the next
342+ // runloop tick to reset it back to nil to avoid runtime
343+ // warnings.
344+ RunLoop . main. schedule {
345+ firstResponderDemand? . wrappedValue = nil
341346 }
342347 }
343348
344349 public class Coordinator : NSObject , UITextFieldDelegate {
345350 var parent : ResponsiveTextField
346- var shouldUpdateView : Bool = true
347351
348352 @Binding
349353 var text : String
@@ -353,16 +357,11 @@ extension ResponsiveTextField: UIViewRepresentable {
353357 self . _text = textField. text
354358 }
355359
356- fileprivate func firstResponderDemandFulfilled( ) {
357- shouldUpdateView = false
358- parent. firstResponderDemand? . wrappedValue = nil
359- }
360-
361360 public func textFieldShouldBeginEditing( _ textField: UITextField ) -> Bool {
362361 if let canBecomeFirstResponder = parent. onFirstResponderStateChanged? . canBecomeFirstResponder {
363362 let shouldBeginEditing = canBecomeFirstResponder ( )
364363 if !shouldBeginEditing {
365- firstResponderDemandFulfilled ( )
364+ parent . resetFirstResponderDemandAfterViewUpdate ( )
366365 }
367366 return shouldBeginEditing
368367 }
@@ -371,14 +370,14 @@ extension ResponsiveTextField: UIViewRepresentable {
371370
372371 public func textFieldDidBeginEditing( _ textField: UITextField ) {
373372 parent. onFirstResponderStateChanged ? ( true )
374- firstResponderDemandFulfilled ( )
373+ parent . resetFirstResponderDemandAfterViewUpdate ( )
375374 }
376375
377376 public func textFieldShouldEndEditing( _ textField: UITextField ) -> Bool {
378377 if let canResignFirstResponder = parent. onFirstResponderStateChanged? . canResignFirstResponder {
379378 let shouldEndEditing = canResignFirstResponder ( )
380379 if !shouldEndEditing {
381- firstResponderDemandFulfilled ( )
380+ parent . resetFirstResponderDemandAfterViewUpdate ( )
382381 }
383382 return shouldEndEditing
384383 }
@@ -387,7 +386,7 @@ extension ResponsiveTextField: UIViewRepresentable {
387386
388387 public func textFieldDidEndEditing( _ textField: UITextField ) {
389388 parent. onFirstResponderStateChanged ? ( false )
390- firstResponderDemandFulfilled ( )
389+ parent . resetFirstResponderDemandAfterViewUpdate ( )
391390 }
392391
393392 public func textFieldShouldReturn( _ textField: UITextField ) -> Bool {
0 commit comments