Ios (代码8-3)。对特定文本字段使用自定义键盘扩展名

Ios (代码8-3)。对特定文本字段使用自定义键盘扩展名,ios,swift,xcode,keyboard,Ios,Swift,Xcode,Keyboard,由于标准数字键盘有“空”按钮,但没有“+/-”按钮,我决定创建自己的键盘扩展。我做到了。 但我不知道如何将它与特定的文本字段链接(并调用),而其他文本字段则使用普通键盘。 是否有机会应用自定义键盘类型,如我自己的自定义键盘?我已经为公制/英制编写了一个计算器。为此,我也编写了自己的键盘 我已将键盘设置为堆叠在堆栈视图中的ui按钮 Xcode的按钮似乎是未知的,因为我刚刚升级到Xcode 8,项目仍在Swift 2.2中 然后,我设置了一个UITextField,并使用我的按钮填充了它的t

由于标准数字键盘有“空”按钮,但没有“+/-”按钮,我决定创建自己的键盘扩展。我做到了。

但我不知道如何将它与特定的文本字段链接(并调用),而其他文本字段则使用普通键盘。
是否有机会应用自定义键盘类型,如我自己的自定义键盘?

我已经为公制/英制编写了一个计算器。为此,我也编写了自己的键盘

我已将键盘设置为堆叠在堆栈视图中的
ui按钮

Xcode的按钮似乎是未知的,因为我刚刚升级到Xcode 8,项目仍在Swift 2.2中

然后,我设置了一个UITextField,并使用我的按钮填充了它的
text
属性。例如,这是我键盘上按钮
1
的功能

@IBOutlet weak var inputField: UITextField!
var numberStr:String = "0"
inputField.text = numberStr

@IBAction func oneKeyboardAction(sender: AnyObject) {
    if numberStr == "0" {
        numberStr = String(numberStr.characters.dropLast())
    }
    let newStr:String = numberStr + String("1")
    numberStr = newStr
    let dotToCommaString = newStr.stringByReplacingOccurrencesOfString(".", withString: ",")
    inputField.text = dotToCommaString
}
此外,我还禁用了用户与文本字段的交互,因此“原始键盘”不会显示

编辑

如评论部分所述,我希望我的答案更符合您的需要。您可以将我的自定义键盘设置为界面生成器中的
UIView
重叠的
UIViewController
。在
viewDidLoad()中将其设置为
MyKeyboardView.hidden=true

然后,您将在文本字段中显示自定义键盘,而不是系统键盘:

func textFieldDidBeginEditing(_ textField: UITextField) {
    if (textField == self.yourDesiredTextField) { //the one where you want to use the custom keyboard 
        MyKeyboardView.hidden = false
    }
}
然后添加一个手势识别器,如下所示:

override func viewDidLoad() {
        super.viewDidLoad()

        MyKeyboardView.hidden = true


        let tap = UITapGestureRecognizer(target: self, action: #selector(gesture))
        tap.numberOfTapsRequired = 1
        view.addGestureRecognizer(tap)
}

func gesture() {

        UIView.animateWithDuration(0.2) {
            self.MyKeyboardView.hidden = true
        }

}

为了让它更平滑一些,我在隐藏键盘时添加了
动画宽度

我找到了基于模拟问题的解决方案:

@IBOutlet weak var inputField: UITextField!
var numberStr:String = "0"
inputField.text = numberStr

@IBAction func oneKeyboardAction(sender: AnyObject) {
    if numberStr == "0" {
        numberStr = String(numberStr.characters.dropLast())
    }
    let newStr:String = numberStr + String("1")
    numberStr = newStr
    let dotToCommaString = newStr.stringByReplacingOccurrencesOfString(".", withString: ",")
    inputField.text = dotToCommaString
}
/*错误时:“无法加载捆绑包中的NIB” 访问文件检查器中.xib文件的属性,选择框上的属性“Target Membership”提示,然后将您的xib文件链接到您的目标 */

在主ViewController.swift中

import UIKit

class ViewController: UIViewController, UITextFieldDelegate, KeyboardDelegate {

    @IBOutlet weak var text1: UITextField!
    @IBOutlet weak var text2: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        // initialize custom keyboard
        let keyboardView = KeyboardView(frame: CGRect(x: 0, y: 0, width: 375, height: 165))
        keyboardView.delegate = self // the view controller will be notified by the keyboard whenever a key is tapped

        // replace system keyboard with custom keyboard
        text1.inputView = keyboardView //accessoryView
        text1.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // required method for keyboard delegate protocol
    func keyWasTapped(text character: String) {

        if Int(character) != nil{
            text1.insertText(character)
        }

        if character == "⌫" {
            if !(text1.text?.isEmpty)! {
                let beforeText = text1.text!
                let truncated = beforeText.substring(to: beforeText.index(before: beforeText.endIndex))
                text1.text = truncated

            }
        }

        if character == "±" {
            let beforeText = text1.text!
            if var number = Int(beforeText) {
                number = -number
                text1.text = "\(number)"
            }
        }


    }

    func textFieldDidBeginEditing(_ textField: UITextField) {
        /*
        if (textField == self.text1) {
            //textField.inputView = keyboardView
        }
        */
    }

}

我理解你的解决方案,但有一个问题:你能在点击任意位置时隐藏你的一组按钮(作为键盘):override func viewDidLoad(){super.viewDidLoad()self.hideKeyboardWhenTappedAround()}我的键盘不能像那样隐藏,因为它是uiviewcontroller的固定部分。但是你可以把它放在一个UIView中,通过设置一个手势识别器来隐藏这个视图,甚至是动画。一点问题也没有我的键盘设置为恒定可见。就像一个硬件计算器,你知道。但正如我所说。将其放在UIView中。默认情况下隐藏它,如
MyKeyboardView.hidden=true
并通过func
textfielddbeginediting(utextfield:UITextField){MyKeyboardView.hidden=false}
将其取消隐藏,然后使用手势识别器再次隐藏我的案例我需要隐藏和显示不同的键盘:我自己的数字键盘(带“+/-”)对于文本字段和用于文本视图的支持ASCII的键盘。没问题,我将编辑我的答案,为您提供更好的想法!看看我最后的答案。我使用了KeyboardDelegate协议解决方案(我在下面发布了所有相关代码)。我认为苹果也可以将这种键盘作为默认选择。好吧!我只是浏览了一下我的公开答案,看看我能做些什么。我只是好奇,因为这个问题仍然悬而未决。我会把你的答案投上一票,不过你自己也能解决!有一个好朋友