Создайте BaseViewController и добавьте универсальный метод туда.
class BaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
func genericMethod(starter: String, helpSubtitle: String){
let helpVC = self.storyboard?.instantiateViewController(withIdentifier: "Help") as! HelpViewController
helpVC.starter = starter
helpVC.helpSubtitle = helpSubtitle
self.present(helpVC, animated: true, completion: nil)
}
@IBAction func onHelp(_ sender: UIButton?) {
//You can use this method as generic IBaction if you want. It can be connected to buttons of all child View Controllers. But doing so will limit your param sending ability. On the plus side though, you won't have to define an IBAction everywhere and you can simply connect your child VC's button to Parent Class' IBAction.
}
}
Теперь наследуйте ваши ViewControllers от этого класса, как:
import UIKit
class ViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func btnTapped(_ sender: Any) {
genericMethod(starter: "View Controller", helpSubtitle: "I was triggered from VC1")
}
}
и
import UIKit
class SecondViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func btnTapped(_ sender: Any) {
genericMethod(starter: "View Controller 2", helpSubtitle: "I was triggered from VC2")
}
}
Вот и все. Оба ваших ViewControllers могут вызывать родительский метод. Если вы все еще хотите использовать общий IBAction, вы можете сделать это тоже, но я бы не рекомендовал этот курс, поскольку вы хотите передавать параметры, которые могут отличаться. Если бы вы хотели это сделать, это выглядело бы так:
Имейте в виду, что ViewController здесь унаследован от базового ViewController, поэтому он может получить доступ к IBActions, определенным в родительском классе. Все, что вам нужно сделать, это перетащить и подключиться.