2016-12-05 2 views
0

У меня есть два разных контроллера контейнера с аналогичными характеристиками. Поэтому я решил создать суперкласс контроллер в раскадровке и в коде, чтобы управлять этим containerViewRedifine родительские свойства как контроллер в дочерние свойства в swift

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) 
} 
... 
} 

Так, в контроллере ребенка, мне нужно переопределить activateListController() с конкретным ViewController

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 
}} 

Но у меня есть ошибка с свойствами ReactionViewController: «значение типа viewcontroller не имеет члена selectedFunction». Родительские свойства не redifined в ребенка свойства

Я также попробовать что-то вроде этого

class ContainerViewController: ContainerController, ReactionViewDelegate { 

var reactionViewController: ReactionViewController? 
var mechanismViewController: MechanismViewController? 

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

    super.viewDidLoad() 
} 

и определения activateListController() с reactionViewController, но у меня было ноль исключение на методе addListController() суперкласса

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

Итак, как я могу управлять наследованием с помощью моего контроллера keeperview? Спасибо

ответ

1

Почему бы вам не сделать что-то вроде этого:

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

Спасибо, что работает отлично. Я знал, что близко, но я не могу найти решение –