2017-04-11 1 views
1

Je voudrais avoir un contrôleur de vue réutilisable appelé MainViewController avec un UITableView à l'intérieur.Comment sous-classer un UIViewController avec UITableViewDelegate dans de nombreuses sous-classes

class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet var tableView : UITableView! 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     self.tableView.dataSource = self 
     self.tableView.delegate = self 
     self.tableView.scrollsToTop = true 

     self.tableView.estimatedRowHeight = 124.0 
     self.tableView.rowHeight = UITableViewAutomaticDimension 
} 

MainViewController

je dois avoir beaucoup de sous-classes de mon MainViewController, à mesure peut les en fonction de mes besoins. IntroViewController est l'un d'entre eux.

class IntroViewController: MainViewController { 

} 

Pour ouvrir le IntroViewController, voici mon Segue:

UINavigationController

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "intro" { 

     let destination = segue.destination as! UINavigationController 
     let ivc = destination.topViewController as! IntroViewController 
    } 

} 

J'ai eu cet accident:

fatal error: unexpectedly found nil while unwrapping an Optional value 

pour la ligne

self.tableView.dataSource = self 

J'ai vérifié, mes prises sont correctement liées. Source de données aussi. Ce que vous essayez de faire ne fonctionne pas vraiment de cette façon.

+0

Qu'est-ce que StoryViewController? –

+0

MainViewController, j'ai corrigé. – cmii

+0

pourquoi contrôleur de navigation entre 2 contrôleurs? –

Répondre

0

Les @IBOutlets sont tous connectés via le Storyboard - mais ils ne "passent pas" dans le pattern que vous espérez utiliser.

Vous pouvez le faire - d'une manière. Jetez un oeil aux discussions et réponses dans ce SO message: How to subclass custom UIViewController in Swift?

Sinon, si vous êtes objectif est d'utiliser une vue de table « commune » contrôleur - mais permettre la personnalisation - vous pouvez créer UITableViewDelegate et UITableViewDataSource séparés fichiers, plus séparer les cellules visuellement conçues, puis les affecter via le code comme souhaité.