2015-09-08 10 views
5

Mam ViewController z Container View, który ma wbudowany TableViewController.ContainerView add outlet

Teraz chciałbym uzyskać dostęp do TableView w ViewController, w jaki sposób mogę to zrobić?

Próbowałem dodać widok kontenera jako wylot, ale nie mogę uzyskać dostępu do osadzonego TableViewController.

enter image description here

Odpowiedz

11

Nie można dokonać bezpośrednio ponieważ wylot widok tabeli znajduje się w innej scenie (kontroler widoku), ale dostęp do widoku table można uzyskać po uzyskaniu odwołania do instancji UITableViewController. Istnieje kilka różnych sposobów robienia tego.

Najpierw można użyć właściwości childViewControllers podklasy UIViewController. Jeśli wiesz, że istnieje tylko jedno dziecko, możesz uzyskać do niego bezpośredni dostęp, w przeciwnym razie musisz określić, które dziecko jest poprawne, powiedzmy, przechodząc przez tablicę.

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

Drugą opcją jest dostęp do UITableViewController podczas osadzania. Jeśli klikniesz na osadzony segue w swoim scenorysie, możesz nadać mu identyfikator identyczny z każdym innym segue. Wtedy można wdrożyć prepareForSegue i chwycić wbudowanego UITableViewController instancji -

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

Osobiście wolę to drugie podejście, ponieważ myślę, że to jest „czystszy”

+0

Drugie podejście skały! – TalL

1

Tworzenie ujście w dziecięcej View Controller i dostęp do niego za pomocą self.childViewControllers.lastObject (zakładając, że masz tylko jedno dziecko, inaczej używać objectAtIndex :)