Хотя я не уверен на 100%, что понимаю ваш вопрос, вот что:
Из других классов вы хотите вызывать действия ваших кнопок, но ваши действия установлены в UITextField.becomeFirstResponder и UIView.endEditing.
Вместо непосредственного вызова этих методов создайте свои собственные методы, которые должны вызывать действия, и поместите эти вызовы в эти методы.
В addInputAccessoryForTextFields (...) измените цель и действие предыдущего элемента управления на:
previousButton.target = self
previousButton.action = #selector(handlePreviousButton)
Теперь добавьте новый метод:
@objc func handlePreviousButton()
{
// you'll need to associate the previous button to a specific text field
// and hang onto that association in your class, such as in a property named textFieldRelatedToPreviousButton.
self.textFieldRelatedToPreviousButton.becomeFirstResponder()
}
Теперь вы можете вызывать handlePreviousButton () напрямую из любого места в вашем классе, если хотите, или даже из других классов.
Обновление
Я только что заметил, что вы расширяете UIViewController.Таким образом, вы не можете добавить хранилище, добавив свойство.Вы можете добавить хранилище через objc_setAssociatedObject, а затем получить его через objc_getAssociatedObject, однако, чтобы обойти это.См. этот SO или этот SO для получения подробной информации об этом.Таким образом, вы можете, например, «прикрепить» textField к вашему предыдущему кнопке, чтобы вы могли получить к нему доступ через метод handlePreviousButton (), который вы добавляете в свое расширение.И вы можете передать в предыдущем параметре previousButton в качестве параметра (отправителя) функцию handlePreviousButton ().
Update 2
Еще один подход, который необходимо учитывать, - это использование тега кнопки.свойство для хранения значения тега связанного textField.(т.е. каждая кнопка и связанный с ней textField будут иметь одинаковое значение тега).Поэтому в handlePreviousButton (sender: UIBarButtonItem) вы перебираете все дочерние элементы UITextField вашего self.view и находите того, чей тег соответствует sender.tag.Затем вы можете делать то, что вам нужно, с этим UITextField.