如何关闭 UI KeyboardType NumberPad?

2023-12-01

我试图隐藏数字键盘,但我不想实现按钮。

当用户点击文本字段外部时,有没有办法关闭数字键盘?


这是你读到它并说“这很简单,你只是......”的问题之一。然后你就去做,让它变得超级复杂。然后意识到事情不必那么复杂。

我想出的答案是使用隐形的,我相信它会帮助其他人UIView它从不互动,而是根据其他观点行事,而且可能不是以您想象的方式。

关于驳回问题的典型答案UIKeyboardTypeNumberPad键盘是添加一个带有按钮的栏作为inputAccessoryView关闭键盘。如果不需要栏和按钮,通常您只需监听背景上的触摸事件即可,但是这个问题是关于表格视图的,这使得这变得更加困难。

但是这个inputAccessoryView功能还是很棒的。它允许您定义一个UIView or UIView显示键盘时要显示的子类。更重要的是,当键盘由于文本字段而显示时,它是inputAccessoryView成为第一响应者。

我可以继续抱怨,但首先这里是一些轻量级类的代码,它在测试中实际上表现得非常好。

的内容NJ_KeyboardDismisser.h are:

#import <UIKit/UIKit.h>

    // For some reason neither inputView or inputAccessoryView are IBOutlets, so we cheat.
@interface UITextField (WhyDoIHaveToDoThisApple)
@property (readwrite, retain) IBOutlet UIView *inputAccessoryView;
@end

@interface NJ_KeyboardDismisser : UIView
@property (nonatomic, weak) IBOutlet UIView *mainView;
-(id)initWithMainView:(UIView *)view; // convienience method for code
@end

以及内容NJ_KeyboardDismisser.m are:

#import "NJ_KeyboardDismisser.h"
@implementation NJ_KeyboardDismisser {
    UITapGestureRecognizer *_tapGR;
}
@synthesize mainView = _mainView;
-(void)setMainView:(UIView *)view{
    if (_tapGR) [_tapGR.view removeGestureRecognizer:_tapGR];
    _mainView = view;
    _tapGR = [[UITapGestureRecognizer alloc] initWithTarget:_mainView action:@selector(endEditing:)];
}
-(id)initWithMainView:(UIView *)view{
    if ((self = [super initWithFrame:CGRectMake(0, 0, 0, 0)])){
        self.mainView = view;
    }
    return self;
}
-(void)didMoveToWindow{ // When the accessory view presents this delegate method will be called
    [super didMoveToWindow];
    if (self.window){ // If there is a window one of the textfields, for which this view is inputAccessoryView, is first responder.
        [self.mainView addGestureRecognizer:_tapGR];
    }
    else { // If there is no window the textfield is no longer first responder
        [self.mainView removeGestureRecognizer:_tapGR];
    }
}
@end

您可能会认出endEditing:方法,正如 Cosique 提到的,它是一个 UIView 扩展方法,要求视图嵌套文本字段退出。听起来很方便吗?这是。通过在表视图上调用它,它包含的文本字段将放弃第一响应者。由于该技术适用于所有UIView无需人为地限制此插座仅UITableView所以插座就是UIView *mainView.

这里最后一个移动部分是UITapGestureRecognizer。我们不想全职添加这个识别器,因为担心会破坏桌面视图的工作。所以我们利用UIView的委托方法didMoveToWindow。我们实际上并没有对窗口做任何事情,我们只是检查一下我们是否在其中;如果我们是,那么我们的一个文本字段就是第一响应者,如果不是,那么它就不是。我们相应地添加和删除手势识别器。

好吧,很简单,但是如何使用它呢?好吧,如果在代码中实例化,你可以这样做,在tableView:cellForRowAtIndexPath::

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(20, 6, 100, 31)];
    [cell.contentView addSubview:field];
    field.keyboardType = UIKeyboardTypeNumberPad;
    field.inputAccessoryView = [[NJ_KeyboardDismisser alloc] initWithMainView:self.view];
}

如果您在故事板中使用静态单元,那么技术是不同的(显然)。首先拖出​​一个通用的NSObject并将其放置在视图下方的深灰色条中(其他对象(例如视图控制器)所在的位置)。然后将这个新对象的类更改为NJ_KeyboardDismisser。然后连接“键盘解除器”mainView该视图(通常是表视图)的属性。然后连接inputAccessoryView属性从该场景中的任何每个文本字段到“键盘解除器”。

Image of the Keyboard Dismisser object listed among the other view controller objects.

试一试!表格视图正常运行。 Apple 的点击识别器足够智能,可以忽略桌面上的滑动,因此您可以滚动。它还会忽略文本字段中的触摸,因此您可以编辑和选择其他文本字段。但是点击文本字段外部,键盘就会消失。

Note:此类的用途不仅限于表视图。如果你想在常规视图上使用它,只需设置mainView属性与视图控制器的视图相同。

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

如何关闭 UI KeyboardType NumberPad? 的相关文章

  • 为什么 [response ExpectedContentLength] 总是返回 -1

    void connection NSURLConnection connection didReceiveResponse NSURLResponse response UIApplication sharedApplication net
  • UITableView框架改变动画问题

    我用谷歌搜索了很多这个问题 但似乎没有答案 所以我希望你们中的一些人知道如何处理这个问题 我有一个具有 tableview 的视图控制器 当我用动画更改视图框架时 一切都很顺利 除了一种特殊情况 当 tableview 的项目多于屏幕大小时
  • font-family 未应用于移动设备

    我的 font family 属性有问题css 我有一个标题 我想使用特定字体设置样式 我在用 fontface 在我的桌面上它工作正常 但在iPhone and iPad我得到了一些标准字体 我认为可能是次 但我不确定 我做了一些研究并尝
  • 在哪里可以找到“get-pip.py”下载链接?

    作为教程的一部分 我尝试下载 pip py 但链接现在不同了 我找不到可以下载 pip 的按钮 这是我得到的链接 https pip pypa io en stable installing cmdoption no setuptools
  • iOS - 自动调整 CVPixelBufferRef 的大小

    我正在尝试裁剪和缩放CMSampleBufferRef基于用户的输入 基于ratio 下面的代码采用 CMSampleBufferRef 将其转换为 CVImageBufferRef 并使用 CVPixelBuffer 根据其字节裁剪内部图
  • CoreData:是否将图像存储到数据库?

    我正在制作一个应用程序 它从网站上为某些用户名拍摄照片 并将其显示在带有用户名的 UITable 中 然后当单击用户名时 它会显示该用户的照片 然后单击照片名称 它会显示全屏照片 我的问题是我正在使用 NSData 从互联网获取照片 我必须
  • Objective-C 实现文件中方法名后面的分号

    void designImageViewNow some code here 分号写法正确吗 就在实现文件 Objective C 中方法名称之后 正文括号之前 这行得通吗 当我正在开发 iPhone 应用程序时 我错误地将分号放在了一个自
  • 将 NSString 的 NSArray 转换为 NSNumber 的更好方法

    考虑下面的代码 NSString param string 1 3 6 10 15 22 28 30 NSArray params param string componentsSeparatedByString NSNumberForma
  • 如何在 iBooks 上搜索桌面 UI

    我想像 iBooks 中那样显示 tableview 的搜索栏 我如何减少搜索栏的宽度以及如何在没有任何背景颜色的情况下显示它 另外 当页面显示时 如何最初隐藏搜索框 我可以想到两个选择 通过子类化 UITextfield 创建您自己的 U
  • 在 UITableView 上显示徽章信息

    我希望在 UITableView 行上显示徽章信息 如下图所示 我尝试使用下面的代码 UILabel labelCell1 UILabel alloc init labelCell1 frame CGRectMake 160 9f 10 0
  • 如何为键盘上的 xml 中的功能键设置不同的背景?

    我正在开发 Android 键盘应用程序 我尝试为普通键和功能键设置不同的背景 但它不起作用
  • 安卓浮动键盘

    是否可以通过编程方式更改键盘的位置 我正在开发一个图腾应用程序 如果键盘停靠在底部 则很难使用 我尝试创建一个扩展 InputMethodService 的自定义键盘 并且我能够更改按键的布局 但我无法更改键盘的视图位置 快捷键 https
  • 如何禁用 UITableView 中某些行的删除操作?

    我知道使用setEditing 启用UITableView的编辑模式 但我更喜欢禁用某些特定行的操作 启用其他行 是否可以 Thanks interdev 实施the tableView canEditRowAtIndexPath meth
  • 在 Objective-C 中比较 2 个字符串

    我写了以下代码 if depSelectedIndice gt 1 comSelectedIndice gt 1 NSLog depart elemet d depSelectedIndice NSLog depart elemet d c
  • NSString – 静态还是内联?有性能提升吗?

    如果我写的话会有任何性能提升吗 NSString helloStringWithName NSString name static NSString formatString Hello return NSString stringWith
  • 是否可以使用 Firebase 安排推送通知? [复制]

    这个问题在这里已经有答案了 我已经阅读了我能找到的所有文档 但仍然不知道这是否可行 如果我是用户 我可以安排特定时间的推送通知吗 Example 1 我是用户并打开应用程序 2 我允许通知并转到 pickerView 或其他任何内容 并设置
  • 如何获取CATransition/Animation的结束事件?

    我的代码如下所示 CATransition transition CATransition animation transition duration duration 我希望得到CATransition Animation的结束事件 是否
  • 在 XCode 中链接静态 ObjC 库的过程

    我正在尝试链接到静态库 但不断收到链接器错误 我发现了一些发布示例的网站 但我无法看到我做错了什么 首先 我创建一个链接到我的库的项目 添加 gt 现有文件找到我的 xcodeproj 文件选择 将项目复制到目标组文件夹 选择我的宿主项目作
  • 如何阻止 UITableView moveRowAt IndexPath 在重新排序时留下空白行

    我遇到一个问题 在重新排序 UITableViewCells 时 tableView 不随单元格滚动 仅出现一个空白行 任何后续滚动都会出现数组越界错误 堆栈跟踪中没有我的任何代码 这是该问题的快速视频 http www screencas
  • 在发生更改事件时将货币格式重新应用到 UITextField

    我正在使用一个包含本地化货币值的 UITextField 我看过很多关于如何使用此功能的帖子 但我的问题是 如何在每次按键后将货币格式重新应用到 UITextField 我知道我可以通过以下方式设置和使用货币格式化程序 NSNumberFo

随机推荐

  • React:如何加载和渲染外部html文件?

    我使用 React 和 Redux 构建了一个小型博客应用程序 博客显示帖子页面 其中包含帖子的标题 作者 标签和描述 当单击标题或 阅读更多 按钮时 我想从本地项目的数据文件夹中加载并呈现一个包含所有帖子的相应帖子的 HTML 文件 Re
  • git checkout [commit-name] 与带点的比较

    有什么区别git checkout commit name and git checkout commit name 我看到第一个命令更改为分离的头状态 您可以从那里提交并继续创建一个新分支 我对第二个命令的作用感到困惑 它保留在主服务器上
  • 如何使用Fast Member将数据批量复制到列名不一致的表中?

    我有一个Person具有以下列名的表 身份证号 姓名 出生日期 我也有一个 poco 作为 public class Person public int Id get set public string Name get set publi
  • 画布宽度值不正确

    所以我认为代码
  • 检测页面上的任何内容是否正在动画化

    我知道关于 animated选择器 但目前正在遇到 可能是少数几个 旧版 IE 的性能问题 见图 我觉得这可能是我正在测试的方式ANY页面动画 目前我正在循环一个间隔 核心测试是 is animated This 这就是我担心的 但由于我不
  • 提交表单数据而不重新加载页面

    我尝试提交表单而不使用 jQuery 重新加载页面本身 但是数据没有显示 并且表单正在重新加载 这是不需要的 jQuery 代码 function submitFormData var firstval first val var seco
  • 如何转置 dask 数据框(将列转换为行)以实现整洁的数据原则

    TLDR 我从 dask bag 创建了一个 dask 数据框 dask 数据框将每个观察 事件 视为一列 因此 我没有为每个事件提供几行数据 而是为每个事件提供一列 目标是将列转置为行 就像 pandas 使用 df T 转置数据帧一样
  • SQL 连接和连接行

    我在两个表之间有多对多关系 Table God Restaurants包含我的餐馆 Table God RestaurantKat包含不同的类别 Table God RestKatReference包含两列 每列保存两个表的 id 以下语句
  • 使用 .htaccess 基于日期和名称的友好 URL

    我计划将我的博客从 wordpress com 上切换到在我自己的服务器上托管的我自己的网站上 当然 我想保留 WordPress 的链接结构 这样 WWW 上指向我博客的链接就不会中断 所以我的问题是 如何获得以下友好的 URL http
  • 如何在 MATLAB 中更改条形颜色

    我是编程新手 所以我正在学习 MATLAB 入门 我想知道如何更改 MATLAB 中条形图的颜色 这是我的脚本 有人可以帮忙吗 x 1 8 for y 20 30 40 50 60 70 80 bar x y if y lt 40 col
  • 使用 XIB 和以编程方式执行视图的优点和缺点

    我想决定是使用 XIB 更好还是完全使用代码设计我的视图 到目前为止 我已经读到 当您在界面生成器上设计视图时 它们是预先构建的 因此即使它们使用更多内存 用户也会感觉一切都更快 人们说使用代码做所有事情都比较困难 但我发现它同样容易 所以
  • 使用 Apache Beam 将插入流式传输到 BigQuery 时如何指定 insertId

    BigQuery 支持流式插入的重复数据删除 如何通过 Apache Beam 使用此功能 https cloud google com bigquery streaming data into bigquery dataconsisten
  • 使用jdom创建xml,如何设置standalone =“no”属性

    当我创建 jdom 文档 Document doc new Document 时 默认情况下我只在 xml 标头中看到版本和编码 如何添加独立属性以获得 在文档到达 JDOM 之前 XMLParser 通常会删除标头 我很确定你的意思是你正
  • Font Awesome 无法使用 vue 正确更新

    我正在尝试使用 font awesome 和 bulma 制作一个可点击的 星 图标 在 Vue 中的常规样式和实体样式 fas 和 far 之间切换 为了实现此目的 我有以下组件
  • 原生 GetUninitializedObject 实际存在于哪里?

    我对一些序列化的东西很好奇 所以我四处探索FormatterServices并找到了一个名为的方法nativeGetUninitializedObject它实际上处理给定类型的初始化 不调用构造函数 该方法装饰有extern关键字和以下属性
  • c 分段错误 fgets

    int main int argc char argv FILE inFilePtr fopen argv 1 r char rawdata malloc sizeof char 100 float ary malloc sizeof fl
  • 两个移动物体与纬度/经度坐标的交点

    尽管我已经阅读了几篇文章 但到目前为止我还无法真正解决这个问题 希望有人可以在这里提供帮助 事实 已知变量 地球表面上的两个移动物体 均具有当前已知的纬度 经度坐标 两个物体的速度也是已知的 以米 秒为单位 一个物体的方向 角度 是已知的
  • HybridAuth / PHP Facebook SDK 身份验证失败(getUser 返回 0)

    我正在尝试配置 HybridAuth 目前还处于早期阶段 现在我想做的就是连接并确保 HA 将重定向到 Facebook 并提示安装应用程序 然后在用户返回时对用户进行身份验证 我正在手动调用以下位置 http mydomain com a
  • 打字机效果 Pygame

    这个问题确实很难问 但我知道 Stack Overflow 的你们都是最聪明的人 我完全不知道为什么会发生这个问题 我对 Python 和 Pygame 相当熟悉 所以任何关于如何改进代码的建议都会带着提高我的技能的热爱而被接受 我正在创建
  • 如何关闭 UI KeyboardType NumberPad?

    我试图隐藏数字键盘 但我不想实现按钮 当用户点击文本字段外部时 有没有办法关闭数字键盘 这是你读到它并说 这很简单 你只是 的问题之一 然后你就去做 让它变得超级复杂 然后意识到事情不必那么复杂 我想出的答案是使用隐形的 我相信它会帮助其他