Swift 3 Unrecognized selector sent to instance UIB

2019-09-22 05:38发布

问题:

I get this error:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITouchesEvent text]: unrecognized selector sent to instance 0x6100000e9400'

The button it crashes on:

import UIKit
import Firebase
import FBSDKLoginKit

class RegisterViewController: UIViewController, FBSDKLoginButtonDelegate, UITextFieldDelegate {

    override func viewDidLoad() {
    super.viewDidLoad()
        // Create Sign Up button
        let signUpButton: UIButton = {
            let button = UIButton()
            button.setImage(#imageLiteral(resourceName: "Go Button@1x"), for: .normal)
            button.addTarget(self, action: #selector(createAccountTapped), for: .touchUpInside) // when tapped on Sign In button, execute function SignInTapped
            button.translatesAutoresizingMaskIntoConstraints = false
            return button
            }()
        func signUpButtonView() {
            signUpButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
            signUpButton.heightAnchor.constraint(equalToConstant: 70).isActive = true
            signUpButton.widthAnchor.constraint(equalTo: view.widthAnchor, constant: 0).isActive = true
            signUpButton.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
        }

        self.view.addSubview(signUpButton)
        signUpButtonView()

    }

    func createAccountTapped(_ usernameTextField: UITextField, passwordTextField: UITextField, repeatPasswordTextField: UITextField) {
        let username = usernameTextField.text
        let password = passwordTextField.text
        let repeatPassword = repeatPasswordTextField.text
    }
}

I have another button for signing up with Facebook and it works fine... I think it's something to do with parameters in the function createAccountTapped but I don't know what's wrong.

回答1:

You can not pass UITextField instance with UIButton action, you can set only these action createAccountTapped() and createAccountTapped(_ sender: UIButton) with UIButton.

If you want to access textField in your UIButton action then you need to create IBOutlet for that textField in your RegisterViewController.