如何检测 iOS 8 中 UITextField 上的删除键?

2023-12-19

我对 UITextField 进行了子类化,并实现了 UIKeyInput 协议的 deleteBackward 方法来检测按下的退格键。这在 iOS 7 上工作正常,但在 iOS 8 上不行。

当我按退格键时,UITextField 上不再调用deleteBackward。

我检查了文档和发行说明,没有任何内容表明发生这种情况的原因。有什么指点吗?


很多人一直说这是一个错误,但由于这个问题仍然存在于通用汽车中,我开始认为这可能是逻辑上的变化。话虽如此,我为我的应用程序编写了这段代码,并在 iOS 7-8 上对其进行了测试。

将以下方法添加到您的UITextField子类。

- (BOOL)keyboardInputShouldDelete:(UITextField *)textField {
    BOOL shouldDelete = YES;

    if ([UITextField instancesRespondToSelector:_cmd]) {
        BOOL (*keyboardInputShouldDelete)(id, SEL, UITextField *) = (BOOL (*)(id, SEL, UITextField *))[UITextField instanceMethodForSelector:_cmd];

        if (keyboardInputShouldDelete) {
            shouldDelete = keyboardInputShouldDelete(self, _cmd, textField);
        }
    }

    BOOL isIos8 = ([[[UIDevice currentDevice] systemVersion] intValue] == 8);
    BOOL isLessThanIos8_3 = ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.3f);

    if (![textField.text length] && isIos8 && isLessThanIos8_3) {
        [self deleteBackward];
    }

    return shouldDelete;
}

这段代码稍微位于私有 API 的红线之前,但是您使用它应该没有问题。我的带有此代码的应用程序位于应用程序商店中。

解释一下,我们调用此方法的超级实现以避免丢失代码。之后我们要打电话-deleteBackward如果没有文字并且iOS版本在8-8.2之间。

EDIT: 2015 年 1 月 22 日

将其子类化也可能会有所帮助-deleteBackward你的子类的方法UITextField。这修复了一些条件错误。其中之一是如果您使用自定义键盘。这是该方法的一个示例。

- (void)deleteBackward {
    BOOL shouldDismiss = [self.text length] == 0;

    [super deleteBackward];

    if (shouldDismiss) {
        if ([self.delegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)]) {
            [self.delegate textField:self shouldChangeCharactersInRange:NSMakeRange(0, 0) replacementString:@""];
        }
    }
}

EDIT: 2015 年 4 月 13 日

正如 @Gee.E 评论的那样,iOS 8.3 已经解决了这个问题。代码已更新以反映更改。

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

如何检测 iOS 8 中 UITextField 上的删除键? 的相关文章

随机推荐

  • 排除迁移的属性[重复]

    这个问题在这里已经有答案了 I have 特性在我的模型上 我不想在中生成字段tables迁移后 是否可以排除特性实体框架核心迁移 我的模型上是否有模型的属性或某些 Fluent API 方法DbContext为了这 您应该能够指定 Not
  • WordPress:如何从自定义分类查询中排除子分类中的帖子?

    我的 WordPress 主题有一个名为 集合 的自定义分类法 自定义分类是分层的 因此存在子集合 我有一个名为 书籍 的集合和一个名为 小说 的子集合 有些帖子只在 书籍 中 有些帖子则在 小说 中 我希望 书籍 集合的页面仅显示主 书籍
  • C# 中的可滚动消息框

    我在VS2008 C 中使用Addin 我需要显示消息 错误消息和其他消息 我不知道消息的长度 因此我想使用 Scrollable MessageBox 我找到了 2007 年的这篇文章 作者 Mike Gold 2007 年 7 月 30
  • NSMutableArray arrayWithArray:与 initWithArray:

    这些都在我的应用程序中工作 没有任何明显的区别 1 theArray NSMutableArray alloc initWithArray NSKeyedUnarchiver unarchiveObjectWithData theData
  • 随机有理数生成

    有理数是可数的 例如 此代码在开区间 0 1 中查找第 k 个有理数 排序为 n1 d1 是在之前 n2 d2 if d1
  • 各个平台的保留文件名是什么?

    我不是在询问文件名的一般语法规则 我的意思是那些不知从哪里跳出来咬你的陷阱 例如 尝试在 Windows 上将文件命名为 COM From http www grouplogic com knowledge index cfm fuseac
  • iPhone 5 上的 Bootstrap 3 不是 XS

    我在制作 Bootstrap 3 网站时遇到了一个非常奇怪的错误 由于某种原因 它不适应较小的 iPhone 屏幕尺寸 导航栏没有折叠 并且 col xs 似乎被忽视 我仔细检查了 iPhone 上的屏幕宽度 320 像素 当我调整浏览器大
  • 如何在 Java GUI 中显示一行?

    我想在 Java swing 中的两个图像之间画一条线 我找到了不同的绘制线条的方法 但没有一种是我想要的方式 这让我想也许我只需要在我想要的地方插入一条线条的图像 无论如何 我想要类似的东西 O O O O 要显示在 O 是图像的位置 而
  • Javascript 登录系统检查 if ("UserPassword") == Undefined 不起作用

    所以基本上在一个 html 文件中 我有一个输入字段 其 id 为 UserPassword 在我的 js 文件中 我有一个函数 register 它会检查您是否已注册 如果没有 则检查这是否是您第一次登录 如果没有 则检查您输入的密码是否
  • Mongodb中的聚合查询返回特定字段

    文件样本 id ObjectId 53329dfgg43771e49538b4567 u id ObjectId 532a435gs4c771edb168c1bd7 n Salman khan e email protected cdn c
  • Owin SelfHost WebApi - 客户端在响应期间关闭连接会引发异常?

    我正在运行一个基于 Owin Selfhost 的 WebApi 其中我通过以下方式放入了 API 未处理的异常记录器 config Services Add typeof IExceptionLogger apiExceptionLogg
  • rake db:test:prepare 不创建所有表

    注意 使用 Rails 3 0 7 Postgresql 8 4 4 1 rake 0 8 7 尝试让 Rails 测试正常工作 命令 rake db test prepare 似乎工作正常 rake db test prepare t i
  • 如何在html中嵌入图像并通过msdb.dbo.sp_send_dbmail将html作为电子邮件发送?

    我可以使用 msdb dbo sp send dbmail 以 html 格式发送电子邮件 仅就格式而言 它对于文本来说非常好 例如 EXEC msdb dbo sp send dbmail recipients p recipients
  • 使用不同的编码和库解析 CSV 文件

    尽管有很多关于该主题的线程 但我在解析 CSV 时遇到了麻烦 它是从 Adwords 关键字规划器下载的 csv 文件 以前 Adwords 可以选择将数据导出为 纯 CSV 可以使用 Ruby CSV 库进行解析 现在可以选择 Adwor
  • 是否存在不应在 .pch 文件中添加所有导入的原因?

    我主要指的是应用程序级导入 而不是构建库时的导入 在这种情况下 很明显为什么应该避免导入 pch 文件内的标头 要点是 pch文件的优点是它可以预编译一次并且无需处理 如果您将所有应用程序标头导入 pch 每次更改其中任何一个标头时都必须重
  • 如何创建具有多个子行(嵌套表)的 jQuery 数据表?

    问题 我需要创建一个具有嵌套表格式的表 当用户单击加号按钮时 它应该显示嵌套表 如果他们点击减号按钮 它应该隐藏 我已经完成了jquery datatable 它工作正常 但我无法显示子表的多行 我已经尝试了很多次 但无法显示正确的格式 这
  • 如何在每个循环周期更新一步进度条? C#

    使用 C Windows 窗体创建 net 应用程序 如何在 100 个循环的每个循环中更新进度条 1 步 我正在循环中处理 Excel 工作表 进度条控件位于 UI 类中 该类连接到控制器类 该控制器类连接到自定义类 MVC 模式 循环位
  • XSLT:如何通过另一个节点查找该节点的值

    我不确定我是否正确地提出了这个问题 这就是为什么我在任何地方都找不到答案 但基本上我需要将一个节点与另一个节点进行匹配 并使用同级节点作为值 这是一个例子
  • Angular 6 中使用 Typescript 进行 Datalayer.push

    当我点击按钮时 我应该发送到数据层信息 但我不知道该怎么做 因为我使用的是 Angular 6 所以我需要使用 Typescript 和 window dataLayer push 不起作用 给我这个错误 Form
  • 如何检测 iOS 8 中 UITextField 上的删除键?

    我对 UITextField 进行了子类化 并实现了 UIKeyInput 协议的 deleteBackward 方法来检测按下的退格键 这在 iOS 7 上工作正常 但在 iOS 8 上不行 当我按退格键时 UITextField 上不再