.NET Maui Entry在iOS上没有返回按钮?

jtw3ybtb  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(169)

我使用的是一个输入控件(.Net 7),键盘类型专门设置为数字,因为输入字母文本是不必要的,并且会导致问题,因为它正在向BT设备发送数据,并且通常只是笨拙地要求用户切换。问题是,在这个键盘布局上没有返回按钮,因此'completed'事件处理程序永远不会触发。
我试过使用OnTextChanged处理程序,它确实像开发人员预期的那样工作,但不是为了解决我的问题,因为条目只需要在完全键入后才能被捕获。
有没有人遇到过这样的解决方案?这在Android方面不是问题,因为返回按钮存在于数字输入中。

ecfdbz9o

ecfdbz9o1#

在iOS的数字键盘上添加完成按钮没有标准的方法。在我的应用程序中,我通过在控制器导航项的右上角放置完成按钮来解决这个问题。
另一个选择是为numerical Entry创建自定义渲染器(在我们的例子中是ExtendedEntry自定义控件)。
注意:您必须更新.NET MAUI的命名空间和您的命名空间

using Xamarin.Forms;

namespace YourNamespace.Controls
{
    public class ExtendedEntry : Entry { }
}

/*
Based on example from: https://forums.xamarin.com/discussion/18346/add-done-button-to- 
   keyboard-on-ios
*/

using System.Drawing;
using YourNamespace.Controls;
using YourNamespace.iOS.Renderers;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(ExtendedEntry), typeof(ExtendedEntryRenderer))]
namespace YourNamespace.iOS.Renderers
{
    public class ExtendedEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Element == null)
                return;

            // Check only for Numeric keyboard
            if (this.Element.Keyboard == Keyboard.Numeric)
                this.AddDoneButton();
        }

        /// <summary>
        /// <para>Add toolbar with Done button</para>
        /// </summary>
        protected void AddDoneButton()
        {
            var toolbar = new UIToolbar(new RectangleF(0.0f, 0.0f, 50.0f, 44.0f));

            var doneButton = new UIBarButtonItem(UIBarButtonSystemItem.Done, delegate
            {
                this.Control.ResignFirstResponder();
                var baseEntry = this.Element.GetType();
                ((IEntryController)Element).SendCompleted();
            });

            toolbar.Items = new UIBarButtonItem[] {
                new UIBarButtonItem (UIBarButtonSystemItem.FlexibleSpace),
                doneButton
            };
            this.Control.InputAccessoryView = toolbar;
        }
    }
}

字符串
Source

相关问题