如何给.DecimalPad iOS键盘添加一个减号?

如何从下面的链接添加减号到.DecimalPadtypes的iOS键盘,如应用程序? 纠正我,如果我错了,但这似乎不是一个自定义的键盘给我,它看起来像从苹果默认小数小键盘我…

带减号的小数键盘

要将某些按键添加到键盘,请打开KeyboardViewController.swift并进行以下更改。

在viewDidLoad()中,在下一个键盘button的代码之后,在函数的底部添加以下内容。

let buttonTitles = ["-"] var buttons = createButtons(buttonTitles) var topRow = UIView(frame: CGRectMake(0, 0, 320, 40)) for button in buttons { topRow.addSubview(button) } self.view.addSubview(topRow) addConstraints(buttons, containingView: topRow) 

接下来添加下面的函数,它将创build带有传入string标题的button。

 func createButtons(titles: [String]) -> [UIButton] { var buttons = [UIButton]() for title in titles { let button = UIButton.buttonWithType(.System) as UIButton button.setTitle(title, forState: .Normal) button.setTranslatesAutoresizingMaskIntoConstraints(false) button.backgroundColor = UIColor(white: 1.0, alpha: 1.0) button.setTitleColor(UIColor.darkGrayColor(), forState: .Normal) button.addTarget(self, action: "keyPressed:", forControlEvents: .TouchUpInside) buttons.append(button) } return buttons } 

该函数遍历一个string数组,并创build带有相应标题的button。 它还为每个button添加一个目标,以便当它被轻敲时,函数keyPressed()将被调用。 接下来添加这个function。

 func keyPressed(sender: AnyObject?) { let button = sender as UIButton let title = button.titleForState(.Normal) (textDocumentProxy as UIKeyInput).insertText(title!) } 

在这里,您可以获得点击button的标题,并通过textDocumentProperty将其插入当前文本input对象的插入点。 这是符合UITextDocumentProxy协议的对象,它充当键盘和召唤它的文本input对象之间的代理。

接下来我们添加addConstraints()方法,它将为button和containsView添加约束。

 func addConstraints(buttons: [UIButton], containingView: UIView){ for (index, button) in enumerate(buttons) { var topConstraint = NSLayoutConstraint(item: button, attribute: .Top, relatedBy: .Equal, toItem: containingView, attribute: .Top, multiplier: 1.0, constant: 1) var bottomConstraint = NSLayoutConstraint(item: button, attribute: .Bottom, relatedBy: .Equal, toItem: containingView, attribute: .Bottom, multiplier: 1.0, constant: -1) var leftConstraint : NSLayoutConstraint! if index == 0 { leftConstraint = NSLayoutConstraint(item: button, attribute: .Left, relatedBy: .Equal, toItem: containingView, attribute: .Left, multiplier: 1.0, constant: 1) }else{ leftConstraint = NSLayoutConstraint(item: button, attribute: .Left, relatedBy: .Equal, toItem: buttons[index-1], attribute: .Right, multiplier: 1.0, constant: 1) var widthConstraint = NSLayoutConstraint(item: buttons[0], attribute: .Width, relatedBy: .Equal, toItem: button, attribute: .Width, multiplier: 1.0, constant: 0) containingView.addConstraint(widthConstraint) } var rightConstraint : NSLayoutConstraint! if index == buttons.count - 1 { rightConstraint = NSLayoutConstraint(item: button, attribute: .Right, relatedBy: .Equal, toItem: containingView, attribute: .Right, multiplier: 1.0, constant: -1) }else{ rightConstraint = NSLayoutConstraint(item: button, attribute: .Right, relatedBy: .Equal, toItem: buttons[index+1], attribute: .Left, multiplier: 1.0, constant: -1) } containingView.addConstraints([topConstraint, bottomConstraint, rightConstraint, leftConstraint]) } } 

运行应用程序,你应该看到一个类似的键盘,如下所示

正如你所看到的,以编程的方式添加视图需要你在代码中设置约束,如果你的键盘的UI很复杂并且有很多键,那么这会变得很复杂,很难debugging。 接下来我们将看看使用Interface Builder来创buildbutton。

通过导航到文件>新build>文件> iOS>用户界面>查看创build一个nib文件。 将其命名为KeyboardView,并确保它位于AC Keyboard目标下。

select笔尖的视图,然后在属性检查器中,将其大小设置为自由forms和状态栏为无。 然后去尺寸检查器,并将其宽度设置为320和高度为220。

在KeyboardViewController.swift中,在调用super.viewDidLoad()之后,在viewDidLoad()中添加以下内容。 这将nib文件设置为视图控制器的视图。

 let nib = UINib(nibName: "KeyboardView", bundle: nil) let objects = nib.instantiateWithOwner(self, options: nil) view = objects[0] as UIView; 

添加视图到笔尖的主视图。 点击Interface Builder界面底部的Pin菜单,给它下面的约束 – 高度为40,尾部空间为0,顶部空间为0,顶部空间为42的容器。确保不检查约束到边距。

 add_constraints 

向视图添加一个button。 将文本颜色设置为深灰色并更改标题。 现在的约束。

使用每个button,selectalignment菜单,然后在容器中select垂直居中。

 alignment auto layout 

select“ – ”button,并为Superview添加5的前导空间。

select“ – ”并在尺寸检查器中,确保其领先的空间S,即设置为5的常数。

select主视图,然后select编辑器>解决自动布局问题>所有视图>更新框架。

运行该应用程序,您应该看到刚刚添加的密钥设置在代码中添加的那些下面。

 interface_builder_ui 

要为键创buildsockets和操作,请从“文档大纲”中select“文件所有者”,然后在“标识”检查器中将该类设置为KeyboardViewController。 然后,您可以像在故事板文件中通常那样通过控件(从控件拖到视图控制器类)来创build动作和sockets。 (在下面的例子中你会看到更多的)。

现在我们已经看到了如何以编程方式创build一个键盘的UI和一个nib文件,让我们添加一些function。 为此,我有一个我们将要使用的启动项目。 该项目是一个简单的键盘,我们将添加一些function。 如下所示。 您应该注意,为了保持简单,我没有为所有尺寸的类devise,所以在iPhone 5S上它看起来不错,但对于更大的屏幕,它看起来并不相同。 你可以在这里下载代码。 还要注意,键盘的名字是Appcoda键盘,而不是我们之前使用的AC键盘。

keyboard_starter

我已经设置了我们需要的操作和sockets,但是没有为它们编写代码(“下一个键盘”键除外)。

首先,您会注意到下一个键盘键已被replace为标题为KB的键。 这个操作方法可以看作是视图控制器文件,如下所示。

 @IBAction func nextKeyboardPressed(button: UIButton) { advanceToNextInputMode() } 

我们首先要设置带有字母和符号的按键的动作,也就是您点击的任意按键,并将其标题看作键入的文本。 我创build了一个名为keyPressed()的所有这些键的操作方法。 如图所示修改此方法。

 @IBAction func keyPressed(button: UIButton) { var string = button.titleLabel!.text (textDocumentProxy as UIKeyInput).insertText("\(string!)") } 

这与我们之前的相似。 button的标题通过textDocumentProperty插入当前文本input对象的插入点。 我们input的所有信件都将在Caps中,但我们会尽快解决。 接下来修改以下function分别为退格(BS),空格(空格)和返回(RTN)键设置操作。

 @IBAction func backSpacePressed(button: UIButton) { (textDocumentProxy as UIKeyInput).deleteBackward() } @IBAction func spacePressed(button: UIButton) { (textDocumentProxy as UIKeyInput).insertText(" ") } @IBAction func returnPressed(button: UIButton) { (textDocumentProxy as UIKeyInput).insertText("\n") } 

运行应用程序并testing密钥。

在视图文件中,您会注意到两个标记为“字符集1”和“字符集2”的视图。这两个视图位于同一行上,一个在另一个上面。 在viewDidLoad()第二个视图是隐藏的。 如图所示修改charSetPressed()函数,以便当用户按下标签为1/2的按键时,按键的文本将变为2/2,并在键盘的第一行显示一组新的字符。

 @IBAction func charSetPressed(button: UIButton) { if button.titleLabel!.text == "1/2" { charSet1.hidden = true charSet2.hidden = false button.setTitle("2/2", forState: .Normal) } else if button.titleLabel!.text == "2/2" { charSet1.hidden = false charSet2.hidden = true button.setTitle("1/2", forState: .Normal) } } 

字符集如果您查看系统键盘,通常会有一个指示,当您点击一个键时,以一个简短的animation的forms。 我们应该添加一些反馈,以便用户知道他们点击了正确的键。 在keyPressed()方法的末尾添加以下内容。

 UIView.animateWithDuration(0.2, animations: { button.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2.0, 2.0) }, completion: {(_) -> Void in button.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1) }) 

这使得按键在缩回原始大小之前轻轻放大。

最后我们将实现Capslock键(CL)。 修改capsLockPressed()函数,如下所示。

 @IBAction func capsLockPressed(button: UIButton) { capsLockOn = !capsLockOn changeCaps(row1) changeCaps(row2) changeCaps(row3) changeCaps(row4) } 

参考