однако, мне просто интересно, смогу ли я сделать это в моем MasterCategoryListViewController, очевидно, не зная ничего о том, что такое CustomItemController?
Да.Почему бы и нет?Однако, то, что будет выдвинуто, это MasterCategoryItemViewController
, а не его подклассы.Как и то, что вы упомянули в своем вопросе, вы знаете, что btnAddTapped
может быть переопределено, поэтому сделайте это так.
ИЛИ, вы можете сделать что-то более интересное:
В вашем MasterCategoryListViewController
есть объект MasterCategoryItemViewController
.Затем в вашем CustomListController
примените любой класс подклассов MasterCategoryListViewController
.Затем вставьте этот MasterCategoryItemViewController
объект в btnAddTapped()
Полный образец:
import UIKit
class ListVC: MasterListVC {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "ListVC"
self.itemVCToBePushed = ItemVC2()
}
}
class MasterListVC: UIViewController {
var itemVCToBePushed: MasterItemVC?
lazy var button: UIButton = {
let button = UIButton(type: .custom)
button.frame = CGRect(x: 100, y: 100, width: 250.0, height: 44.0)
button.setTitle("Test", for: .normal)
button.addTarget(self, action: #selector(self.pushMe), for: .touchUpInside)
button.backgroundColor = .gray
return button
}()
@objc func pushMe() {
guard let itemVCToBePushed = self.itemVCToBePushed else { return }
self.navigationController?.pushViewController(itemVCToBePushed, animated: true)
}
override func viewDidLoad() {
super.viewDidLoad()
self.title = "MasterListVC"
self.view.backgroundColor = .white
self.view.addSubview(self.button)
}
}
/////
class ItemVC: MasterItemVC {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "ItemVC"
}
}
class ItemVC2: MasterItemVC {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "ItemVC2"
}
}
class MasterItemVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "MasterItemVC"
self.view.backgroundColor = .white
}
}