Я сделал UITextField extension
для ящика return button
, чтобы я мог повторно использовать его для всех клавиатур, у которых нет кнопки возврата (например, цифровой клавиатуры).
Что я хочу: Я могу настроить действие кнопки возврата на resignFirstResponder()
или becomeFirstResponder()
, если textfield
находится в конце или в середине другого textfield
. В этом случае я бы хотел, чтобы он был becomeFirstResponder()
, когда пользователь нажимает return
на firstNameTextField
. (примечание: мой textfield IBOutlet
в порядке)
Что я получаю: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITextField phoneNumberShouldReturnWithSender:]: unrecognized selector sent to instance 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
}
}
ViewController
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()
}
}
Спасибо !!