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()
。(注意:my
textfield 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