问题描述
我想使用 inputAccessoryView 在键盘上方添加自定义数字按钮。我已经添加了视图。我已将类 CustomKeyboard 分配给 xib 文件。在 CustomKeyboard 类文件中,我连接了按钮的 IBAction。我的 ViewController textField1 和 textFiled2 中有两个 textField,并且我将 inputAccessoryView 与 textField1 相关联。当我点击 textField1 时,我的自定义按钮会显示在键盘上方。我的目标是当我点击我的自定义按钮时,它应该在 textFild2 中输入值。但我真的不知道我将如何实现这一目标。任何人有一些想法请帮助我。
import Foundation
import UIKit
class CustomKeyboard:UIView {
@IBAction func rowButtonAction(_ sender: UIButton) {
print(sender.currentTitle)
}
}
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
let view = UINib(nibName: "CustomKeyboard",bundle: nil).instantiate(withOwner: nil,options: nil)[0] as! UIView
textField1.inputAccessoryView = view//customView
textField1.autocorrectionType = .no
textField2.autocorrectionType = .no
}
}
解决方法
您可以使用委托或闭包从 CustomKeyboard 回调到 ViewController。下面的示例使用委托方法,当用户点击视图时将调用函数 rowTapped。
import Foundation
import UIKit
protocol CustomKeyBoardProtocol:AnyObject{
fun rowTapped(title:String)
}
class CustomKeyboard:UIView {
weak var delegate:CustomKeyBoardProtocol?
@IBAction func rowButtonAction(_ sender: UIButton) {
print(sender.currentTitle)
delegate.rowTapped(title: sender.currentTitle)
}
}
import UIKit
class ViewController: UIViewController,CustomKeyBoardProtocol{
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
let customView = UINib(nibName: "CustomKeyboard",bundle: nil).instantiate(withOwner: nil,options: nil)[0] as! CustomKeyboard
customView.delegate = self// he
textField1.inputAccessoryView = customView//customView
textField1.autocorrectionType = .no
textField2.autocorrectionType = .no
}
func rowTapped(title:String){//it will be called on tap
}
}