【问题标题】:Create custom input for UITextField in Swift在 Swift 中为 UITextField 创建自定义输入
【发布时间】:2015-01-27 23:49:14
【问题描述】:

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

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

您能否建议如何在 Swift 中将我的视图控制器分配给 textField.inputViewController

谢谢

【问题讨论】:

  • 我也遇到了和你一样的问题。如果你知道怎么做,你能通知我吗?

标签: ios swift keyboard first-responder uiinputviewcontroller


【解决方案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.
    }


}

我使用名为 CustomInputViewController.xib 的 xib 文件来设计键盘

【讨论】:

    【解决方案2】:

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

    MyInputView keyboard = ...
    field.inputView = keyboard
    keyboard.delegate = field
    

    【讨论】:

      猜你喜欢
      • 2015-08-13
      • 1970-01-01
      • 2023-03-16
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多