Textfield扩展错误-无法识别的选择器发送到实例swift
我将Textfield扩展错误-无法识别的选择器发送到实例swift,swift,uitextfield,Swift,Uitextfield,我将UITextField扩展名添加到板条箱return按钮,这样我就可以重复使用所有没有return按钮的键盘(如数字键盘) >强> >我可以自定义返回按钮动作,无论是 PaseFrestRebug()/还是 BeMeFielsAdvestRead()/在 > TeXField处于其他 TeXField的最后或中间。在这种情况下,当用户点击return到firstNameTextField时,我希望它是becomeFirstResponder()。(注意:mytextfield IBOutl
UITextField扩展名
添加到板条箱return按钮
,这样我就可以重复使用所有没有return按钮的键盘(如数字键盘)
<> >强> >我可以自定义返回按钮动作,无论是<代码> PaseFrestRebug()/<代码>还是<代码> BeMeFielsAdvestRead()/<代码>在<代码> > TeXField处于其他<代码> TeXField的最后或中间。在这种情况下,当用户点击return
到firstNameTextField
时,我希望它是becomeFirstResponder()
。(注意:mytextfield IBOutlet
已按顺序排列)
我得到的信息:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[UITextField PhoneNumbers ShouldReturnWithEnder:]:未识别的选择器发送到实例0x7f8d07f2b6d0'
延伸
import Foundation
import UIKit
extension UITextField {
func addReturnButtonOnKeyboard(myAction: Selector?) {
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
doneToolbar.barStyle = .default
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let next: UIBarButtonItem = UIBarButtonItem(title: "Return", style: .done, target: self, action: myAction)
let items = [flexSpace, next]
doneToolbar.items = items
doneToolbar.sizeToFit()
self.inputAccessoryView = doneToolbar
}
}
视图控制器
import UIKit
import Alamofire
import IQKeyboardManagerSwift
class NewUserViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var usernameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var comfirmPasswordTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var phoneNumberTextField: UITextField!
@IBOutlet weak var firstNameTextField: UITextField!
@IBOutlet weak var lastNamePasswordTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardWhenTappedAround()
usernameTextField.delegate = self
passwordTextField.delegate = self
comfirmPasswordTextField.delegate = self
emailTextField.delegate = self
phoneNumberTextField.delegate = self
firstNameTextField.delegate = self
lastNamePasswordTextField.delegate = self
phoneNumberTextField.addReturnButtonOnKeyboard(myAction: #selector(phoneNumberShouldReturn(sender:)))
IQKeyboardManager.shared.enableAutoToolbar = false
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if let nextResponder = textField.superview?.viewWithTag(textField.tag + 1) {
nextResponder.becomeFirstResponder()
} else {
textField.resignFirstResponder()
}
return false
}
@objc func phoneNumberShouldReturn(sender: UITextField) {
firstNameTextField.becomeFirstResponder()
}
}
谢谢 您在扩展中指定了目标,所以操作被发送到文本字段,而不是您的控制器,而是像下面这样使用 1) 将目标添加到接口
。。。
func addReturnButtonNonKeyboard(目标:Any?,myAction:选择器?){
let doneToolbar:UIToolbar=UIToolbar(帧:CGRect.init(x:0,y:0,宽度:UIScreen.main.bounds.width,高度:50))
doneToolbar.barStyle=.default
设flexSpace=UIBarButtonItem(barButtonSystemItem:.flexibleSpace,
目标:无,行动:无)
下一步:uibarbuttoneim=uibarbuttoneim(标题:“Return”,样式:。完成,
target:target,action:myAction)//target:self