2

我正在用 Swift 语言编写一个 iOS 应用程序,我所要做的就是为文本字段创建一个自定义输入。

我创建了一个带有两个按钮的附加视图控制器,我想要的是这个视图控制器(而不是键盘)在我突出显示我的文本字段时弹出。
基本上我想要的是创建一个小的自定义键盘,但我只是希望它在我的应用程序中:我找到了很多关于创建自定义键盘的教程,但这与有一个简单的视图控制器不同时弹出文本字段突出显示。

你能建议如何textField.inputViewController在 Swift 中分配我的视图控制器吗?

谢谢

4

2 回答 2

1

您可以将自己的视图控制器分配给 inputViewcontroller:

您的 viewController 必须是UIInputViewController例如的子类:

class CustomInputViewController: UIInputViewController {
    @IBOutlet var insertTextButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.inputView?.translatesAutoresizingMaskIntoConstraints = false
        // Do any additional setup after loading the view.
    }

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

    @IBAction func insertText(_ button: UIButton){
        self.textDocumentProxy.insertText((button.titleLabel?.text)!);
    }
}

这里只有一个insertTextButton我在 xib 文件中设计的按钮。

在您的主视图控制器中,您需要一个文本字段(或文本视图)的子类:

class textfield: UITextField {
    var _inputViewController : UIInputViewController?
    override public var inputViewController: UIInputViewController?{
        get { return _inputViewController }
        set { _inputViewController = newValue }
    }
}

您分配给您的文本字段。

现在您可以将自己的 inputViewcontroller 分配给您的文本字段,例如:

class ViewController: UIViewController {

    private var customInputViewController = CustomInputViewController(nibName: "CustomInputViewController",
                                                                      bundle: nil)
    @IBOutlet var textField: textfield!
    override func viewDidLoad() {
        super.viewDidLoad()
        self.textField.inputViewController = customInputViewController
        // Do any additional setup after loading the view, typically from a nib.
    }

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


}

我使用带有名称的 xib 文件CustomInputViewController.xib来设计键盘

于 2018-04-22T17:53:11.623 回答
0

据我所知,您不能使用视图控制器。您需要制作自己的视图并将其分配给 inputView 字段。确保视图有一个委托,以便它知道要使用哪个字段:

MyInputView keyboard = ...
field.inputView = keyboard
keyboard.delegate = field
于 2014-11-29T17:33:05.940 回答