2015-09-12 3 views
0

У меня есть корневой VC, который вставляет представление таблицы через представление контейнера с помощью segue. Таким образом, одновременно отображаются как корневые VC, так и дочерние VC.Быстрое создание делегата протокола от корневого VC до встроенного VC

if segue.identifier == "TableSegue" { 
      let toView = segue.destinationViewController as! TableViewController 
      toView.delegate = self 
     } 

Как я могу реализовать делегат протокола между корневой ВМ и детской ВМ, так как ребенок VC встроен в корневом ОМ?

Я хочу, чтобы функции были запущены в дочернем VC после нажатия кнопки в корневом VC.

Я пытался реализовать это протокол делегировать обычный способ, но это, кажется, не быть подобрано в ребенке VC

ответ

0
protocol TableViewInterface { 
    func someWork() 
} 

class RootVC:UIViewController { 
    var delegate: TableViewInterface? 

    func callDelegate() { 
     delegate?.someWork() 
    } 

} 

class TableViewController: UITableViewController, TableViewInterface { 

    func someWork() { 
     //Perform your the work you want done or the action you want fired in your tableView here... 
    } 
} 

Выше приведена пример стандартного шаблона делегата в стриже. Похоже, вы пытаетесь установить делегата в prepareForSegue(), но IRRC он не будет вызван с помощью containerView. Вероятно, вы захотите получить ссылку на таблицу TableView через вид контейнера.

Вы должны быть в состоянии получить ссылку на него, делая что-то подобное в вашем RootVC

if let tableVC = childViewControllers[0] as? TableViewController { 
      self.tableViewController = tableVC 
} 

Я надеюсь, что это все имеет смысл

Смежные вопросы