Browse Source

fix responder issue.

pull/8963/head
Dan Walmsley 4 years ago
parent
commit
9a4cd3d8c9
  1. 11
      src/iOS/Avalonia.iOS/AvaloniaView.Text.cs
  2. 28
      src/iOS/Avalonia.iOS/AvaloniaView.cs

11
src/iOS/Avalonia.iOS/AvaloniaView.Text.cs

@ -54,12 +54,18 @@ public class AvaloniaResponder : UIResponder, IUITextInput
}
}
public AvaloniaResponder()
private UIResponder _nextResponder;
public AvaloniaResponder(AvaloniaView view, ITextInputMethodClient client)
{
_nextResponder = view;
_client = client;
_tokenizer = new UITextInputStringTokenizer(this);
}
public override UIResponder NextResponder => _nextResponder;
public override bool CanPerform(Selector action, NSObject? withSender)
{
return base.CanPerform(action, withSender);
@ -241,7 +247,8 @@ public class AvaloniaResponder : UIResponder, IUITextInput
return new AvaloniaTextRange(range);
}
throw new Exception();
return null;
//throw new Exception();
}
UITextPosition IUITextInput.GetPosition(UITextPosition fromPosition, nint offset)

28
src/iOS/Avalonia.iOS/AvaloniaView.cs

@ -27,11 +27,9 @@ namespace Avalonia.iOS
private TouchHandler _touches;
private ITextInputMethodClient _client;
private bool _isActive;
private AvaloniaResponder _textResponder;
public AvaloniaView()
{
_textResponder = new AvaloniaResponder();
_topLevelImpl = new TopLevelImpl(this);
_touches = new TouchHandler(this, _topLevelImpl);
_topLevel = new EmbeddableControlRoot(_topLevelImpl);
@ -56,8 +54,6 @@ namespace Avalonia.iOS
public override bool CanResignFirstResponder => true;
public override UIResponder NextResponder => _textResponder;
internal class TopLevelImpl : ITopLevelImplWithTextInputMethod, ITopLevelImplWithNativeControlHost,
ITopLevelImplWithStorageProvider
{
@ -164,6 +160,8 @@ namespace Avalonia.iOS
bool ITextInputMethodImpl.IsActive => _isActive;
private AvaloniaResponder _currentResponder;
void ITextInputMethodImpl.SetClient(ITextInputMethodClient client)
{
if (_client != null)
@ -175,21 +173,23 @@ namespace Avalonia.iOS
if (_client is { })
{
//_client.CursorRectangleChanged += ClientOnCursorRectangleChanged;
//_client.SurroundingTextChanged += ClientOnSurroundingTextChanged;
_textResponder.BecomeFirstResponder();
if (_currentResponder != null && _currentResponder.IsFirstResponder)
{
_currentResponder.ResignFirstResponder();
_currentResponder = null;
}
var x = _textResponder.IsFirstResponder;
var keyWindow = UIApplication.SharedApplication.KeyWindow;
_currentResponder = new AvaloniaResponder(this, _client);
//_client.CursorRectangleChanged += ClientOnCursorRectangleChanged;
var windowNextResponder = keyWindow.NextResponder;
//_client.SurroundingTextChanged += ClientOnSurroundingTextChanged;
_currentResponder.BecomeFirstResponder();
var nr1 = windowNextResponder.NextResponder;
var x = _currentResponder.IsFirstResponder;
}
else
{
_textResponder.ResignFirstResponder();
_currentResponder.ResignFirstResponder();
}
}
@ -265,7 +265,7 @@ namespace Avalonia.iOS
void ITextInputMethodImpl.Reset()
{
_textResponder?.ResignFirstResponder();
_currentResponder?.ResignFirstResponder();
}
}
}

Loading…
Cancel
Save