numberToolbar.barStyle = UIBarStyle.BlackTranslucent
numberToolbar.items=[
UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Bordered, target: self, action: "hoopla"),
UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil),
UIBarButtonItem(title: "Apply", style: UIBarButtonItemStyle.Bordered, target: self, action: "boopla")
]
numberToolbar.sizeToFit()
textField.inputAccessoryView = numberToolbar //do it for every relevant textfield if there are more than one
我省略了"Cancel"按钮,因为默认键盘也没有 . 如果你确实想要一个"Cancel"按钮,我建议你将它实例化为 UIBarButtonSystemItemCancel ,并确保你're not discarding the original value in your text field. The 764268 behavior implemented in Luda'的答案,它用空字符串覆盖该值,可能不是你想要的 .
21 回答
如果我们只是告诉视图控制器的视图结束编辑,我们也可以使 "user touched somewhere else" 解决方案更简单:
...假设“触摸其他地方解除键盘”是视图上任何其他可编辑字段的理想行为 .
Another solution. Perfect if there are other non-number pad text fields on the screen.
这是对Luda对Swift的回答的改编:
在你的UIViewController子类的声明中
在ViewDidLoad中放置:
并添加函数hoopla和hoopla(随意选择其他名称,只需相应地更改ViewDidLoad中的选择器名称
我见过的技巧是制作一个自定义透明按钮,大小与整个视图相同,然后在其click方法中,让文本字段重新签名第一个响应者 . 因此,用户可以单击该字段外的任何位置来关闭键盘 .
UIKeyboardTypeNumberPad and missing return key中的解决方案效果很好,但前提是屏幕上没有其他非数字键盘文本字段 .
我把这个代码转换成了一个UIViewController,您可以简单地将其子类化以使数字键盘工作 . 您需要从上面的链接中获取图标 .
NumberPadViewController.h:
和NumberPadViewController.m:
请享用 .
以下是对Luda的回答的改革,其中包括以下变化:
附件视图的大小自动调整为应用程序框架的宽度
避免了不推荐使用的常量
UIBarButtonItemStyleBordered
"Done"按钮被实例化为
UIBarButtonSystemItemDone
目前,“完成”按钮位于附件视图的中心 . 您可以通过删除相关侧的空间将其放置在左侧或右侧 .
我省略了"Cancel"按钮,因为默认键盘也没有 . 如果你确实想要一个"Cancel"按钮,我建议你将它实例化为
UIBarButtonSystemItemCancel
,并确保你're not discarding the original value in your text field. The 764268 behavior implemented in Luda'的答案,它用空字符串覆盖该值,可能不是你想要的 .有关构建附件视图的更多信息,请参阅custom views for data input上的Apple文档 . 您可能还想查阅UIToolbar和UIBarButtonItem上的参考页面 .
这是最新的代码 . 只需在viewController中包含#import“UIViewController NumPadReturn.h”即可 .
这是.h
还有他们
使用扩展名的 Swift 3 解决方案 . 如果您的应用程序中有多个数字
UITextField
对象,则可以灵活地为每个UITextField
决定是否在点击完成或取消时执行自定义操作 .使用默认操作的使用示例:
使用自定义完成操作的使用示例:
一个更容易的解决方案
This forum post描述了如何自定义UIKeyboard以将自定义视图添加到键盘上 .
我发现@user1258240's answer非常简洁,因为这不像设置
returnKeyType
属性那么简单 .只是想为此贡献我自己的“可重用”方法:
SWIFT 3.0 一种不同的味道,使用了之前一些答案的部分内容 .
我描述了iOS 4.2 here的一个解决方案,但在键盘出现后,dismiss按钮淡入 . 这并不可怕,但也不理想 .
在上面链接的问题中描述的解决方案包括一个更优雅的幻觉来消除按钮,在那里我淡出并垂直移动按钮以提供键盘和按钮一起消除的外观 .
simplest 方式是:
创建 custom transparent button 并将其放在左下角,其中
CGSize
与UIKeyboardTypeNumberPad
中的空格相同 . 在按钮单击时分别在textFieldbecomeFirstResponder
上切换(显示/隐藏)此按钮 .这是我遇到过的最简单的解决方案 . 我从Beginning iOS 5 Development book中学到了这一点 .
假设number字段被称为
numberField
.ViewController
中,添加以下方法:ViewController.m
中,添加以下代码:返回
nib
文件 .打开
Utilities
pan .在
Utilities
下打开Identity inspector
.单击
View
(在nib文件中)一次 . 确保您没有点击视图中的任何项目 . 为了澄清,您应该在Identity inspector
的Class
下看到UIView .将类从UIView更改为UIControl .
打开
Connection Inspector
.单击并拖动
Touch Down
并将箭头放在File Owner
图标上 . (仅供参考...文件所有者图标显示在View
的左侧,并显示为带黄色框的空心立方体 . )选择方法:
closeKeyboard
.运行程序 .
现在,当您单击
View
背景上的任何位置时,您应该可以关闭键盘 .希望这可以帮助您解决问题 . :-)
我修改了Bryan的解决方案,使其更加健壮,因此它可以与可能出现在同一视图中的其他类型的键盘很好地配合 . 它在这里描述:
Create a DONE button on the iOS numpad UIKeyboard
我试着在这里解释一下,但是大部分代码都是不容易适应的代码
如果您提前知道要输入的号码数量(例如4位数的PIN码),您可以在4次按键后自动关闭,根据我对此类似问题的回答:
dismissing Number Pad
在这种情况下,无需额外的完成按钮 .
如果您有多个数字字段,我建议继承UITextField以创建一个NumericTextField,它始终显示带有完成按钮的数字键盘 . 然后,只需在Interface Builder中将您的数字字段与此类关联,您就不需要在任何View控制器中添加任何其他代码 . 以下是我在Xcode 8.0中使用的Swift 3.0类 .
对于Swift 2.2,我使用它
关于查找键盘视图和在第3行添加完成按钮的所有实现(这就是为什么button.y = 163 b / c键盘的高度为216)是脆弱的,因为iOS会不断更改视图层次结构 . 例如,以上代码都不适用于iOS9 .
我认为通过[[[UIApplication sharedApplication] windows] lastObject]找到最顶层的视图更安全,只需添加左下角的按钮,doneButton.frame = CGRectMake(0,SCREEN_HEIGHT-53,106) ,53); //肖像模式
Swift 2.2 /我使用了Dx_的答案 . 但是,我想在所有键盘上使用此功能 . 所以在我的基类中我放了代码:
然后在viewDidLoad中调用self.view.subviews上的addDoneButtonForTextFields(如果使用表视图,则调用willDisplayCell),将Done按钮添加到所有键盘 .