假设我有 20 个 View Controller ,它们都需要相同的按钮和操作,有没有办法避免在每个 Controller 中实现相同的 ibaction?我应该用我的操作子类化 UIViewController 然后将我的 Controller 基于该子类吗?或者还有其他方法吗?
最佳答案
我最终遵循了此处概述的基于协议(protocol)/值(value)的方法 -> subclassing-can-suck-and-heres-why
在我的例子中,我有一个位于多个 View 上的“设置”按钮。
protocol SettingsButtonRenderer {
func goToSettings()
}
extension SettingsButtonRenderer where Self: UIViewController {
func goToSettings() {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let settingsNavigationController = storyBoard.instantiateViewController(withIdentifier: "SettingsNavigationController")
present(settingsNavigationController, animated: true, completion: nil)
}
}
class DeliveryTabViewController: UIViewController, SettingsButtonRenderer {
@IBOutlet weak var goToSettingBtn: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
goToSettingBtn.target = self
goToSettingBtn.action = #selector(DeliveryTabViewController.settingsClicked as (DeliveryTabViewController) -> () -> ())
}
func settingsClicked() {
goToSettings()
}
}
关于 swift 3 : How to have a "global" button and action used in multiple controllers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40980274/