简体   繁体   English

快速将父级属性作为控制器重新转换为子级属性

[英]Redifine a parent properties as controller into a child properties in swift

I have 2 different containerView controllers with similar characteristics. 我有2个具有类似特征的不同containerView控制器。 So I decide to create a superclass controller in the storyboard and in code to manage these containerView 所以我决定在情节提要和代码中创建一个超类控制器来管理这些containerView

class ContainerController: UIViewController {

@IBOutlet weak var containerView: UIView!
weak var listController: UIViewController?
weak var detailController: UIViewController?

let deviceIdiom = UIScreen.main.traitCollection.userInterfaceIdiom    

override func viewDidLoad() {
    super.viewDidLoad()

    activateListController()        
    addListController()
}

func activateListController(){}

func addListController(){
    self.addChildViewController(listController!)
    listController?.view.frame = defineChildSize()
    self.containerView.addSubview((listController?.view)!)
    listController?.didMove(toParentViewController: self)
}
...
}

So, in the child controller, I need to redefine activateListController() with the specific ViewController 因此,在子控制器中,我需要使用特定的ViewController重新定义activateListController()

class ContainerViewController: ContainerController, ReactionViewDelegate {

var selectedProduct = String()
var selectedFunction = String()

override func viewDidLoad() {        
    super.viewDidLoad()        
}

override func activateListController(){
self.listController = listController as! ReactionViewController
self.listController = self.storyboard?.instantiateViewController(withIdentifier: "ReactionController") as! ReactionViewController?
    self.listController.selectedFunction = self.selectedFunction
    self.listController?.selectedProduct = self.selectedProduct
    self.listController?.delegate = self
}}

But I have an error with ReactionViewController properties: "value of type viewcontroller has no member selectedFunction". 但是我对ReactionViewController属性有一个错误:“类型为viewcontroller的值没有成员selectedFunction”。 The parent properties is not redifined into a child properties 父属性未重新转换为子属性

I also try something like that 我也尝试这样

class ContainerViewController: ContainerController, ReactionViewDelegate {

var reactionViewController: ReactionViewController?
var mechanismViewController: MechanismViewController?

override func viewDidLoad() {
    listController = reactionViewController
    detailController = mechanismViewController

    super.viewDidLoad()
}

and defining activateListController() with reactionViewController, but I had a nil exception on the method addListController() of the superclass 并使用reactionViewController定义activateListController(),但是在超类的方法addListController()上我没有一个异常

 func addListController(){
    self.addChildViewController(listController!) //nil exception

So, how can I well manage inherit with my containerview controller? 因此,如何使用我的containerview控制器很好地管理继承? Thank 谢谢

Why don't you do something like this: 你为什么不做这样的事情:

override func activateListController(){
   let newListController = storyboard?.instantiateViewController(withIdentifier: "ReactionController") as! ReactionViewController?
   newListController.selectedFunction = selectedFunction
   newListController.selectedProduct = selectedProduct
   newListController.delegate = self
   listController = newListController
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM