2015-09-08 13 views
5

Ho un ViewController con un Container View che ha incorporato TableViewController.ContainerView add outlet

Ora desidero accedere allo nello ViewController, come posso creare uno sbocco per questo?

Ho provato ad aggiungere la vista contenitore come presa, ma non riesco ad accedere allo TableViewController incorporato.

enter image description here

risposta

11

Non si può fare una presa direttamente a causa la vista tabella si trova in una scena diversa (controller di visualizzazione), ma è possibile accedere a tableview dopo aver fatto riferimento all'istanza UITableViewController. Ci sono un paio di modi diversi per farlo.

Innanzitutto, è possibile utilizzare la proprietà childViewControllers della sottoclasse UIViewController. Se sai che esiste un solo figlio, puoi accedervi direttamente, altrimenti devi determinare quale sia il bambino corretto, ad esempio eseguendo il ciclo attraverso l'array.

let myTableViewController = self.childViewControllers[0] as! UITableViewController 
let theTableView = myTableViewController.tableView 

La seconda opzione è accedere allo UITableViewController durante la procedura di incorporamento. Se fai clic sui passaggi di incorporamento nello storyboard, puoi assegnargli un identificatore come con qualsiasi altro seguito. Quindi è possibile implementare prepareForSegue e afferrare l'incorporato UITableViewController esempio -

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if (segue.identifier == "tableviewEmbed") { 
     let myTableViewController = segue.destinationViewController as! UITableViewController 
     let theTableView = myTableViewController.tableView 
    } 
} 

Personalmente, preferisco questo secondo approccio, come penso che sia 'pulita'

+0

Second rocce approccio! – TalL

1

Crea sbocco nel bambino View Controller e accedervi utilizzando self.childViewControllers.lastObject (ammesso che abbiate un solo figlio, altrimenti utilizzare objectAtIndex :)