You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI iOS端Entry失焦问题:点击屏幕外部如何取消焦点?

在.NET MAUI iOS端实现点击Entry外部失焦的方案

iOS原生输入控件默认不会在点击外部区域时自动取消焦点,要实现该功能可以通过以下两种方式:

方法一:给单个Entry绑定外部点击失焦逻辑

通过扩展Entry的Handler,针对iOS平台添加专属手势处理:

  1. 在共享项目中创建扩展类:
public static class EntryExtensions
{
    public static void EnableTapOutsideToDismiss(this Entry entry)
    {
#if IOS
        entry.HandlerChanged += (sender, e) =>
        {
            if (entry.Handler?.PlatformView is UIKit.UITextField nativeTextField)
            {
                nativeTextField.EditingDidBegin += (textFieldSender, args) =>
                {
                    var keyWindow = UIKit.UIApplication.SharedApplication.KeyWindow;
                    var dismissTap = new UIKit.UITapGestureRecognizer(() =>
                    {
                        nativeTextField.ResignFirstResponder();
                        dismissTap.RemoveTarget(null, null);
                        keyWindow.RemoveGestureRecognizer(dismissTap);
                    });
                    keyWindow.AddGestureRecognizer(dismissTap);
                };
            }
        };
#endif
    }
}
  1. 在使用Entry的页面后台启用该功能:
public YourPage()
{
    InitializeComponent();
    MyEntry.EnableTapOutsideToDismiss();
}

这个逻辑会在Entry获得焦点时,给当前窗口添加全局点击手势,触发后让Entry失焦并移除手势,避免重复绑定。

方法二:给页面添加全局点击失焦逻辑

如果页面内所有Entry都需要该功能,可以给整个页面绑定点击手势:

  1. 在页面XAML中添加手势识别器:
<ContentPage ...>
    <ContentPage.GestureRecognizers>
        <TapGestureRecognizer Tapped="PageTappedHandler"/>
    </ContentPage.GestureRecognizers>
    
    <ContentPage.Content>
        <!-- 页面内容,包含多个Entry -->
        <Entry Placeholder="输入框1"/>
        <Entry Placeholder="输入框2"/>
    </ContentPage.Content>
</ContentPage>
  1. 在页面后台实现点击处理:
private void PageTappedHandler(object sender, EventArgs e)
{
#if IOS
    var focusedElement = FocusManager.GetCurrentFocusedElement();
    if (focusedElement is Entry focusedEntry)
    {
        focusedEntry.Unfocus();
    }
#endif
}

注意事项

  • 方法二中,如果页面存在Button、ListView这类自带点击事件的控件,需确保它们的点击优先级高于页面手势,避免被拦截。
  • 两种方法都通过#if IOS指令做平台隔离,不会影响Android等其他平台的原有行为。

内容的提问来源于stack exchange,提问作者Alpay Çalışır

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:44:54