我的应用程序中有两个主屏幕,目前两者都只是UIViewController
。这两个视图控制器非常相似 - 它们都实现了我的自定义子类UIView
called HeaderView
负责显示信息并接受用户输入。就目前而言,这段代码是重复的,因为HeaderView
两个视图控制器的设置是相同的 - 唯一的区别是当用户确认文本输入时会发生什么HeaderView
.
为了减少重复代码,我创建了一个名为InputViewController
(的子类UIViewController
),它包含两个相同的视图控制器的各个方面。最终,我希望这两个视图控制器进行子类化InputViewController
代替UIViewController
.
class InputViewController: UIViewController, InputProtocol {
private let headerView = HeaderView()
override func viewDidLoad() {
super.viewDidLoad()
// layout, etc.
setupCallbacks()
}
internal func setupCallbacks() {
headerView.onUpdate = { (text: String) in
// called when user confirms text entry in headerView
self.onHeaderUpdate()
}
}
internal func onHeaderUpdate() {} // Blank function
}
setupCallbacks()
and onHeaderUpdate()
是协议中定义的方法InputViewController
符合.这HeaderView
实现一个回调闭包,该闭包在setupCallbacks()
by headerView.onUpdate...
该协议InputViewController
符合:
protocol InputProtocol {
func setupCallbacks()
func onHeaderUpdate()
}
To illustrate this, I drew up a diagram;
因为我想要的子类InputViewController
覆盖onHeaderUpdate()
方法,传统上是留下定义onHeaderUpdate()
in InputViewController
空白还是有其他解决方案?