2016-04-03 3 views
5

Je voudrais créer une super classe dans un framework qui modifie les propriétés d'IBOutlet. Cependant, j'aimerais qu'une sous-classe soit connectée au storyboard, car je ne veux pas connecter les contrôles à la classe dans le framework.Remplacer les propriétés IBOutlet de super classe?

Par exemple, la classe super dans mon cadre ressemble à ceci:

public class MySuperDetailViewController: UIViewController { 

    @IBOutlet public weak var titleLabel: UILabel? 
    @IBOutlet public weak var dateLabel: UILabel? 
    @IBOutlet public weak var contentWebView: UIWebView? 

    ... 
} 

Puis, dans la sous-classe, je voudrais contrôler-glisser des contrôles sur la sous-classe. Je dois donc exposer ces propriétés en les surchargeant. Je suis en train de le faire, mais il ne me permet pas:

class MyDetailViewController: MySuperDetailViewController { 

    @IBOutlet weak var titleLabel: UILabel? 
    @IBOutlet weak var dateLabel: UILabel? 
    @IBOutlet weak var contentWebView: UIWebView? 

} 

L'erreur que je reçois est: Cannot override with a stored property 'titleLabel', 'dateLabel', and 'contentWebView'.

Comment puis-je faire ceci ou une meilleure approche pour cela?

Répondre

8

N'essayez pas de recréer les variables de la sous-classe; les variables IBOutlet existent toujours. Vous pouvez toujours les connecter à Interface Builder de différentes manières.

  1. Utilitaires (panneau de droite) -> Inspecteur de connexion - faites glisser depuis la liste des IBOutlets.
  2. Structure du document (panneau de gauche) - glisser de MyDetailViewController
  3. glisser du cercle jaune lorsque vous avez la UIViewController sélectionnée dans Interface Builder

Note: Tous les sous-classes UIViewController héritent d'un IBOutlet nommé view; cette propriété existe déjà dans Interface Builder même si vous ne pouvez pas cliquer sur + glisser pour la connecter.