gpt4 book ai didi

ios - 如何在.DecimalPad iOS键盘上添加减号?

转载 作者:行者123 更新时间:2023-11-28 07:12:01 25 4
gpt4 key购买 nike

如何从下面的链接向应用程序的.DecimalPad类型iOS键盘添加减号?如果我错了,请纠正我,但这对我而言似乎不是自定义键盘,它看起来像是苹果公司给我的默认十进制键盘...

Decimal keypad with a minus sign

最佳答案

要向键盘添加一些键,请打开KeyboardViewController.swift并进行以下更改。

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

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)

接下来添加下面的函数,该函数将创建带有传递到其中的字符串标题的按钮。
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
}

此函数遍历字符串数组,并创建具有相应标题的按钮。它还向每个按钮添加一个目标,以便在点击该按钮时将调用功能keyPressed()。接下来添加此功能。
func keyPressed(sender: AnyObject?) {
let button = sender as UIButton
let title = button.titleForState(.Normal)
(textDocumentProxy as UIKeyInput).insertText(title!)
}

在这里,您可以获取所点击按钮的标题,并通过textDocumentProperty将其插入到当前文本输入对象的插入点。这是一个符合UITextDocumentProxy协议的对象,该协议充当键盘和召唤它的文本输入对象之间的代理。

接下来,我们添加addConstraints()方法,该方法将向按钮和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复杂且具有许多键,则可能会变得复杂且难以调试。接下来,我们将研究如何使用Interface Builder创建按钮。

通过导航到文件>新建>文件> iOS>用户界面>视图来创建nib文件。将其命名为KeyboardView并确保它在AC键盘目标下。

选择笔尖的视图,然后在“属性”检查器中,将其“大小”设置为“自由形式”,并将“状态栏”设置为“无”。然后转到“大小”检查器,将其宽度设置为320,将高度设置为220。

在super.viewDidLoad()调用之后,在KeyboardViewController.swift中的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

在视图中添加一个按钮。将文本颜色设置为“深灰色”并更改标题。现在为约束。

使用每个按钮,选择“对齐”菜单,然后选择“容器中的垂直居中”。
alignment auto layout

选择“-”按钮,并为Superview添加5的前导空格。

选择“-”,然后在“大小”检查器中,确保其前导空间为S,即设置为常数5。

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

运行该应用程序,您应该看到刚添加的键设置在代码中添加的键下方。
interface_builder_ui

要为按键创建插座和操作,请从文档大纲中选择文件的所有者,然后在身份检查器中将类设置为KeyboardViewController。然后,您可以通过将控件从控件拖到视图控制器类中,从而像在故事板文件中一样创建动作和出口。 (您将在下面的示例中看到更多信息)。

现在,我们已经了解了如何通过程序和Nib文件来创建键盘的UI,现在让我们为其添加一些功能。为此,我有一个将要使用的入门项目。该项目是一个简单的键盘,我们将向其中添加一些功能。如下所示。您应该注意,为简单起见,我并未针对所有尺寸的类别进行设计,因此虽然在iPhone 5S上看起来不错,但在更大的屏幕上看起来却不太一样。您可以在此处下载代码。还要注意,键盘的名称是Appcoda键盘,而不是我们之前使用的AC键盘。

keyboard_starter

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

首先,您会注意到“下一键盘”键已替换为标题为KB的键。在视图控制器文件中可以看到用于此操作的方法,如下所示。
@IBAction func nextKeyboardPressed(button: UIButton) {
advanceToNextInputMode()
}

我们首先将设置带有字母和符号的键的操作,即您点击并看到其标题作为键入文本的任何键。我为所有这些键创建了一个名为keyPressed()的操作方法。如图所示修改此方法。
@IBAction func keyPressed(button: UIButton) {
var string = button.titleLabel!.text
(textDocumentProxy as UIKeyInput).insertText("\(string!)")
}

这类似于我们以前的情况。按钮的标题通过textDocumentProperty插入到当前文本输入对象的插入点。我们输入的所有字母均以大写字母表示,但我们会尽快修复。接下来,修改以下功能以分别为Backspace(BS),Space(SPACE)和Return(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")
}

运行该应用程序并测试按键。

在视图文件中,您会注意到两个标记为Char Set 1和Char Set 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)
}
}

字符集
如果您查看系统键盘,通常会显示一个指示,当您敲击某个键时会以简短的动画形式出现。我们应该添加某种反馈,以便用户知道他们点击了正确的键。在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)
}

Reference

关于ios - 如何在.DecimalPad iOS键盘上添加减号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28101460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com