Si votre objectif est de laisser IBOutlets à être héritée, vous devez effectuer les opérations suivantes:
1- Ajouter les IBOutlets dans la classe Super:
Super classe (UIViewController) ne devrait pas être directement connecté à un ViewController au storyboard, il devrait être générique. Lors de l'ajout des IBOutlets à la super classe, ils ne devraient être connectés à aucun composant, les sous-classes devraient le faire. Aussi, vous pourriez vouloir faire un peu de travail (c'est pourquoi vous devriez appliquer ce mécanisme) pour les IBOutlets de la super classe.
classe Super devrait être similaire à:
class SuperViewController: UIViewController, UITableViewDataSource {
//MARK:- IBOutlets
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// setting text to the label
label.text = "Hello"
// conforming to table view data source
tableView.dataSource = self
}
// handling the data source for the tableView
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
cell?.textLabel?.text = "Hello!"
return cell!
}
}
2- Hériter classe Super et connecter le IBOutlets:
Simplement, votre sous-classe devrait être similaire à:
class ViewController: SuperViewController {
override func viewDidLoad() {
// calling the super class version
super.viewDidLoad()
}
}
À partir du storyboard, affectez le contrôleur de vue à ViewController
(sous-classe), puis reconstruisez le projet (cmd + b).
Maintenant, après avoir sélectionné le contrôleur de vue et en sélectionnant « Inspecteur de connexion », vous devriez voir -dans les IBOutlets Section-:
vous pouvez les connecter manuellement aux composants de l'interface utilisateur qui existe dans votre sous-classe ViewController (faites glisser du cercle vide vers le composant). ils devraient ressembler à:
Et voilà! La vue et l'étiquette de la table de votre sous-classe doivent hériter de ce qui est inclus dans la super classe.
J'espère que cela a aidé.
L'héritage est une fonctionnalité de langage de programmation, elle n'est pas liée au storyboard, quel est exactement le problème? –
quand je m'utilise. label dans UIViewControllerA, il est nul, tous les contrôles sont nuls – keen
Par défaut, si vous les implémentez comme IBOutlets, ils devraient être 'nil' par défaut, sauf si vous les connectez depuis le storyboard. –