如何在 swift 中为 VP OTPView 添加数字键盘上的完成按钮
How to add Done button on numberpad keyboard for VPMOTPView in swift
我正在为 OTP 字段使用 VPMOTPView,当我在这里点击 OTP 视图时,我得到的是带数字键盘的键盘,但这里是如何将完成按钮添加到键盘。
我可以在键盘上为文本字段添加完成按钮,但是如何为 VPMOTPView 添加。
class OTPViewController: UIViewController {
@IBOutlet weak var otpView: VPMOTPView!
var phone : String?
var otp : String?
override func viewDidLoad() {
super.viewDidLoad()
//self.navigationBarButton()
otpView.otpFieldsCount = 6
otpView.otpFieldDefaultBorderColor = UIColor.lightGray
otpView.otpFieldEnteredBorderColor = UIColor(named: "LightPrimaryColor") ?? UIColor.blue
otpView.otpFieldErrorBorderColor = UIColor.red
otpView.otpFieldBorderWidth = 1
otpView.delegate = self
otpView.shouldAllowIntermediateEditing = false
otpView.otpFieldSize = 25
otpView.otpFieldDisplayType = .underlinedBottom
otpView.otpFieldEntrySecureType=false
otpView.initializeUI()
emailIconLabel.text = "We have sent an sms with OTP \nto \(phone!)"
self.getOTPService()
}
}
请帮助我添加在键盘上完成的代码。
您可以在键盘顶部附加一个带有完成按钮的工具栏。
extension UITextField {
func addDoneButtonOnKeyboard() {
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
doneToolbar.barStyle = .default
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let done = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(someMethod))
let items = [flexSpace, done]
doneToolbar.items = items
doneToolbar.sizeToFit()
inputAccessoryView = doneToolbar
}
}
导入的部分在您的 UITextField 上 inputAccessoryView
。
先在UITextField
上介绍这个extension
添加Done
按钮。
extension UITextField {
/// Adding a done button on the keyboard
func addDoneButtonOnKeyboard() {
let doneToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
doneToolbar.barStyle = .default
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let done = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
let items = [flexSpace, done]
doneToolbar.items = items
doneToolbar.sizeToFit()
self.inputAccessoryView = doneToolbar
}
/// Done button callback
@objc func doneButtonAction() {
self.resignFirstResponder()
}
}
现在,在 VPMOTPView
中使用的所有 UITextField
实例上调用 addDoneButtonOnKeyboard
方法,如下所示,
override func viewDidLoad() {
super.viewDidLoad()
//self.navigationBarButton()
otpView.otpFieldsCount = 6
otpView.otpFieldDefaultBorderColor = UIColor.lightGray
otpView.otpFieldEnteredBorderColor = UIColor(named: "LightPrimaryColor") ?? UIColor.blue
otpView.otpFieldErrorBorderColor = UIColor.red
otpView.otpFieldBorderWidth = 1
otpView.delegate = self
otpView.shouldAllowIntermediateEditing = false
otpView.otpFieldSize = 25
otpView.otpFieldDisplayType = .underlinedBottom
otpView.otpFieldEntrySecureType=false
otpView.initializeUI()
emailIconLabel.text = "We have sent an sms with OTP \nto \(phone!)"
otpView.subviews.compactMap({ [=11=] as? VPMOTPTextField}).forEach { tv in
tv.addDoneButtonOnKeyboard()
}
self.getOTPService()
}
我正在为 OTP 字段使用 VPMOTPView,当我在这里点击 OTP 视图时,我得到的是带数字键盘的键盘,但这里是如何将完成按钮添加到键盘。
我可以在键盘上为文本字段添加完成按钮,但是如何为 VPMOTPView 添加。
class OTPViewController: UIViewController {
@IBOutlet weak var otpView: VPMOTPView!
var phone : String?
var otp : String?
override func viewDidLoad() {
super.viewDidLoad()
//self.navigationBarButton()
otpView.otpFieldsCount = 6
otpView.otpFieldDefaultBorderColor = UIColor.lightGray
otpView.otpFieldEnteredBorderColor = UIColor(named: "LightPrimaryColor") ?? UIColor.blue
otpView.otpFieldErrorBorderColor = UIColor.red
otpView.otpFieldBorderWidth = 1
otpView.delegate = self
otpView.shouldAllowIntermediateEditing = false
otpView.otpFieldSize = 25
otpView.otpFieldDisplayType = .underlinedBottom
otpView.otpFieldEntrySecureType=false
otpView.initializeUI()
emailIconLabel.text = "We have sent an sms with OTP \nto \(phone!)"
self.getOTPService()
}
}
请帮助我添加在键盘上完成的代码。
您可以在键盘顶部附加一个带有完成按钮的工具栏。
extension UITextField {
func addDoneButtonOnKeyboard() {
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
doneToolbar.barStyle = .default
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let done = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(someMethod))
let items = [flexSpace, done]
doneToolbar.items = items
doneToolbar.sizeToFit()
inputAccessoryView = doneToolbar
}
}
导入的部分在您的 UITextField 上 inputAccessoryView
。
先在UITextField
上介绍这个extension
添加Done
按钮。
extension UITextField {
/// Adding a done button on the keyboard
func addDoneButtonOnKeyboard() {
let doneToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
doneToolbar.barStyle = .default
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let done = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
let items = [flexSpace, done]
doneToolbar.items = items
doneToolbar.sizeToFit()
self.inputAccessoryView = doneToolbar
}
/// Done button callback
@objc func doneButtonAction() {
self.resignFirstResponder()
}
}
现在,在 VPMOTPView
中使用的所有 UITextField
实例上调用 addDoneButtonOnKeyboard
方法,如下所示,
override func viewDidLoad() {
super.viewDidLoad()
//self.navigationBarButton()
otpView.otpFieldsCount = 6
otpView.otpFieldDefaultBorderColor = UIColor.lightGray
otpView.otpFieldEnteredBorderColor = UIColor(named: "LightPrimaryColor") ?? UIColor.blue
otpView.otpFieldErrorBorderColor = UIColor.red
otpView.otpFieldBorderWidth = 1
otpView.delegate = self
otpView.shouldAllowIntermediateEditing = false
otpView.otpFieldSize = 25
otpView.otpFieldDisplayType = .underlinedBottom
otpView.otpFieldEntrySecureType=false
otpView.initializeUI()
emailIconLabel.text = "We have sent an sms with OTP \nto \(phone!)"
otpView.subviews.compactMap({ [=11=] as? VPMOTPTextField}).forEach { tv in
tv.addDoneButtonOnKeyboard()
}
self.getOTPService()
}