Событие Complte для редактора ведет себя как событие не в фокусе - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь сохранить какое-то значение в редакторе после нажатия кнопки «Готово» на клавиатуре, для этого я использовал событие Completed для редактора, но это вызывается при нажатии на всюду в представлении, как событие Unfocused. Как избежать этого?

<controls:CustomEditor Keyboard="Default" 
                       ReturnKeyType="Next" 
                       TextChanged="Comment_Changed" 
                       Completed="OnDoneClicked"  
                       VerticalOptions="StartAndExpand" 
                       HorizontalOptions="FillAndExpand" 
                       Text="{Binding QuestionComment}">
    <controls:CustomEditor.FontSize>
        <OnIdiom x:TypeArguments="x:Double">
            <OnIdiom.Phone>
                <OnPlatform x:TypeArguments="x:Double" 
                            iOS="12" 
                            Android="12" 
                            WinPhone="30" />
            </OnIdiom.Phone>
            <OnIdiom.Tablet>
                <OnPlatform x:TypeArguments="x:Double" 
                            iOS="13" 
                            Android="13" 
                            WinPhone="40" />
            </OnIdiom.Tablet>
        </OnIdiom>
    </controls:CustomEditor.FontSize>
</controls:CustomEditor>

CustomEditorClass выглядит следующим образом:

public const string ReturnKeyPropertyName = "ReturnKeyType";

public CustomEditor() { }

public static readonly BindableProperty ReturnKeyTypeProperty = BindableProperty.Create(
    propertyName: ReturnKeyPropertyName,
    returnType: typeof(ReturnKeyTypes),
    declaringType: typeof(CustomEditor),
    defaultValue: ReturnKeyTypes.Done );

public ReturnKeyTypes ReturnKeyType
{
    get { return (ReturnKeyTypes)GetValue(ReturnKeyTypeProperty); }
    set { SetValue(ReturnKeyTypeProperty, value); }
}

public enum ReturnKeyTypes : int
{
    Default,
    Go,
    Google,
    Join,
    Next,
    Route,
    Search,
    Send,
    Yahoo,
    Done,
    EmergencyCall,
    Continue
}

И событие выглядит следующим образом:

private async void OnDoneClicked(object sender, EventArgs e)
{
  //some logic
}

1 Ответ

0 голосов
/ 25 апреля 2018

Пожалуйста, смотрите документацию , это предполагаемое поведение

iOS (Отмена фокусировки в редакторе или нажатие кнопки «Готово» вызывает событие). Android / Windows Phone (отключение редактора вызывает событие)

Я проверил некоторые приложения для обмена сообщениями (iOS), и у них вообще нет кнопки done на клавиатуре, они предоставляют кнопку отправки помимо элемента управления вводом.

В зависимости от того, чего вы пытаетесь достичь, я вообще отказываюсь от нажатия кнопки done на клавиатуре и полагаюсь на какое-то представление о пользовательском интерфейсе, который используется для этой цели. В любом случае, это зависит от платформы, Android не поддерживает его вообще, AFAIK. Чтобы избавиться от кнопки «Готово», вам нужно будет реализовать собственный рендерер и установить для InputAccessoryView нативного элемента управления значение null (см. здесь )

[assembly: ExportRenderer(typeof(CustomEditor), typeof(CustomEditorRenderer))]
namespace ProjectName.iOS
{
    public class CustomEditorRenderer : EditorRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs e)
        {
            base.OnElementChanged(e);
            this.Control.InputAccessoryView = null;
        }
    }
}

Если вы действительно хотите, чтобы кнопка отправлялась, вы можете создать производную от Editor с помощью специального средства визуализации, которое создает InputAccessoryView и вызывает событие SendPressed для вашего пользовательского Editor, когда InputAccessoryView нажата. Но помните, это не возможно для Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...