“完成”按钮未触发 Xamarin Entry 上的“完成”事件

2024-02-22

我添加后iOS 上的“完成”按钮 https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/ios/add-done-to-keyboard/在 Xamarin Forms 中的数字键盘中,我遇到了另一个问题:“完成”按钮未触发“完成”事件(就像返回按钮一样)。 在实现这一点的过程中,我发现了以下代码Xamarin 论坛 https://forums.xamarin.com/discussion/comment/164104/#Comment_164104:

using System;
using System.Drawing;
using System.Reflection;
using Xamarin.Forms.Platform.iOS;
using Xamarin.Forms;
using UIKit;
using KeyboardTest.iOS;
using KeyboardTest;

[assembly: ExportRenderer(typeof(EntryDone), typeof(EntryDoneRenderer))]

namespace KeyboardTest.iOS
{
public class EntryDoneRenderer : EntryRenderer
{
// used to cache the MethodInfo so we only have the reflection hit once
private MethodInfo baseEntrySendCompleted = null;
public EntryDoneRenderer ()
{
}

protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
    base.OnElementChanged (e);

    if (this.Element.Keyboard == Keyboard.Numeric) 
    {
        // only want the Done on the numeric keyboard type
        UIToolbar toolbar = new UIToolbar (new RectangleF (0.0f, 0.0f, (float)Control.Frame.Size.Width, 44.0f));

        var doneButton = new UIBarButtonItem (UIBarButtonSystemItem.Done, delegate {
            this.Control.ResignFirstResponder ();
            Type baseEntry = this.Element.GetType();
            if(baseEntrySendCompleted==null)
            {
                // use reflection to find our method
                baseEntrySendCompleted = baseEntry.GetMethod("SendCompleted",BindingFlags.NonPublic|BindingFlags.Instance);
            }

            try 
            {
                baseEntrySendCompleted.Invoke(this.Element,null);
            } 
            catch (Exception ex) 
            {
                // handle the invoke error condition    
            }

        });

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

        this.Control.InputAccessoryView = toolbar;
    }
}
}
}

我不知道为什么,但我收到错误:

System.NullReferenceException: Object reference not set to an instance of an object
  at myGame.iOS.DoneEntryRenderer.<OnElementChanged>m__0 (System.Object , System.EventArgs ) [0x0005d] in /Users/silviu/Projects/myGame/iOS/DoneEntry.cs:37 

在那一行我有代码:baseEntrySendCompleted.Invoke(this.Element, null);

我尝试调试该问题,发现SendCompleted方法不存在,但我不明白如何在最新版本的 Xamarin 中解决这个问题,因为我认为在那家伙发布代码的那一刻,工作了。

Thanks!


SendCompleted()实际上是为IEntryController所以你不再需要为此使用反射。事实上,这种方式似乎不再有效。只需致电SendCompleted()直接按你的按钮,就像这样。

    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);

        var toolbar = new UIToolbar(new CGRect(0.0f, 0.0f, Control.Frame.Size.Width, 44.0f));

        toolbar.Items = new[]
        {
            new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
            new UIBarButtonItem(UIBarButtonSystemItem.Done, delegate {
                Control.ResignFirstResponder();
                ((IEntryController)Element).SendCompleted();
            })
        };

        this.Control.InputAccessoryView = toolbar;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“完成”按钮未触发 Xamarin Entry 上的“完成”事件 的相关文章

  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 在实例化对象之前是否可以检查故事板中是否存在标识符?

    在我的代码中我有这一行 但我想知道是否有办法检查是否 一些控制器 在我将它与 一起使用之前就存在实例化ViewControllerWithIdentifier 方法 如果标识符不存在 则应用程序崩溃 如果没有好的方法 这并不是一个大问题 我
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 使用 MapKit 的地形和卫星视图

    我是 Mapkit View 的新手 当我给出没有目的地的纬度和经度时 我想显示 MapKit中是否可以通过地形 卫星视图来显示地图 有教程链接吗 我看过一些访问 Google 地图 API html 文件 的示例 有必要吗 或者您可以通过
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S

随机推荐

  • 如何在redshift中生成12位唯一编号?

    我的表中有 3 列 即email id rid final id 规则rid and final id If the email id有对应的rid use rid as the final id If the email id没有对应的r
  • for循环中多个异步函数之后的NodeJS回调

    我从 mongodb 获取一个文档 其中包含一个带有该文档注释的数组 评论中是撰写评论的用户的 id 我现在需要根据用户的 id 获取用户名 但遇到了几个问题 我有以下代码 显然 它不起作用 但我希望它能让您了解我想要完成的任务 MORE
  • 找不到类 PHP

    I used 这个推特库 https github com abraham twitteroauth并收到此错误 谁能告诉我哪里出错了 ERROR Fatal error Class Abraham TwitterOAuth Config
  • joomla中如何设置默认语言

    我使用 Joomla 1 5 24 Stable 使用 JoomFish 2 2 3 发布来翻译网站 在 joomfish 语言管理器的内容语言中 我有 3 种语言 en ru 和 ro 默认设置为 ro 激活就是全部 无论浏览器语言如何
  • 如何以编程方式打开 .net 2.0。它是否正确?

    我正在尝试以编程方式打开 安装 Net 2 0 Framework视窗功能 B c Windows 7 及更高版本不允许您手动安装 net 我的客户永远无法从控制面板启用该功能 Windows 7 包含 net 2 0 但 Windows
  • 在动作组合期间访问 Play Framework 路由参数

    我有一个操作想要应用于 Play 应用程序中的多个路线 这些路由对产品执行操作 并且产品可以有多个版本 我希望我的 API 能够正常工作 以便用户可以显式指定版本 通过查询参数 如果他们没有指定版本 我们将为他们从数据库中查找最新版本并对其
  • 最大连接池是否也限制数据库的最大连接数?

    我正在使用 hikari cp 和 spring boot 应用程序 该应用程序有超过 1000 个并发用户 我已经设置了最大池大小 spring datasource hikari maximum pool size 300 当我使用查看
  • 通过socket发送wav文件

    我正在尝试通过套接字发送 wav 文件 我收到错误 TypeError must be string or buffer not instance waveFile wave open WAVE OUTPUT FILENAME rb my
  • Umbraco 7 SEO 标签

    我想在 Umbraco 中创建 SEO 标签的网站 我想知道它是如何做到的 有没有最佳实践文件或建议 我不是 SEO 专家 但希望下面的代码片段可以帮助您入门 Metadata 在页面上我添加了一些属性 如果您按照文档类型 通过继承或通过组
  • 如何处理 Wicket 自定义模型中抛出的异常?

    我有一个带有自定义模型的组件 扩展 wicket 标准模型类 当 Wicket 调用时 我的模型从数据库 Web 服务加载数据getObject 此查找可能会因多种原因而失败 我想通过在带有该组件的网页上显示一条不错的消息来处理此错误 最好
  • 如何使用宏来收集变量名称?

    我想简化以下内容 class A int a int b int c std vector
  • 使用 React Hooks 出现“太多重新渲染”错误

    我在这里遇到了 React Hooks 的困扰 我在网上查找 但无法弄清楚如何使这些示例适应我的代码 我有以下组件会触发 太多重新渲染 错误 const EmailVerification gt const showMessage setS
  • symfony2:找不到AppKernel中包含的类

    我有这个app AppKernel
  • Mongo shell 无法连接到 Azure CosmosDB

    我无法在 Mac 下从 MongoDB Shell 连接到 Azure CosmosDB mongodb api mongo host XXX documents azure com port 10255 username XXX pass
  • 需要 Underscore.js 中 _.bindAll() 函数的解释

    我一直在学习一些backbone js并且我见过很多例子 bindAll 用来 我已经阅读了整个backbone js和underscore js文档页面 试图了解它的作用 但我仍然对它的作用非常模糊 这是下划线的解释 bindAll ob
  • docker swarm中容器之间的通信

    我想在 docker swarm 模式下通过 WebSocket 连接在主节点和工作节点之间进行通信 工作节点应该已到达主节点 连接失败 另外 我想通过 http 从我的主机连接到主节点 连接也失败 这是我的docker compose y
  • 一对多关系删除

    我有一对多的关系 class GameSystem Object dynamic var gameSystemName class games Object dynamic var gameSystemName gameSystemName
  • 有没有办法将“if case”语句编写为表达式?

    考虑这段代码 enum Type case Foo Int case Bar Int var isBar Bool if case Bar self return true else return false 真恶心 我想写这样的东西 en
  • 两个 beta 分布的乘积

    假设我有两个随机变量 X 1 1 Y 2 2 我想计算 Z XY 的分布 随机变量的乘积 With scipy 我可以通过以下方式获取单个 Beta 版的 pdf from scipy stats import beta rv beta a
  • “完成”按钮未触发 Xamarin Entry 上的“完成”事件

    我添加后iOS 上的 完成 按钮 https developer xamarin com recipes cross platform xamarin forms ios add done to keyboard 在 Xamarin For