2016-08-14 2 views
1

Voici une question sur laquelle je n'arrive pas à trouver de conseil (probablement à cause de mon mauvais anglais lors de la recherche sur le net: d'où le mauvais titre!).La sortie NSTableView est-elle sous-classée dans NSOutlineView dans le code?

J'ai une sous-classe d'un NSTableView dans un xib qui est utilisé plusieurs fois dans différentes fenêtres. Mais dans l'une de ces fenêtres, je veux que la tableView se comporte comme une NSOutlineView (mais profite aussi des fonctionnalités intéressantes que j'ai ajoutées). Je suis réticent à créer simplement une sous-classe d'un outlineView et copier tout le code de la sous-classe tableView, comme je veux réutiliser le même code (maintenance de code plus facile), et le xib aussi bien. Comment dois-je faire?

Josh

+0

Essayez de créer une catégorie qui fournit des fonctionnalités par implémentations par défaut auxquelles vos classes peuvent se conformer. –

+0

les catégories en soi n'existent pas dans Swift; voulez-vous dire des extensions de protocole? Et si c'est le cas, il ne peut utiliser aucune des propriétés stockées des classes impliquées – BaseZen

Répondre

0

Si votre sous-classe n'a pas de propriétés stockées supplémentaires, et vous n'avez pas besoin de passer outre initializers, déclarer vos méthodes dans une clause d'extension à NSTableView au lieu d'une sous-classe:

extension NSTableView { 
    func forAllSubclassesOfNSTableView() { /* etc. */ } 
} 


let ov = NSOutlineView() 
ov.forAllSubclassesOfNSTableView() // Works 
+0

merci, mais en réalité, ma sous-classe a beaucoup de propriétés, et les initialiseurs aussi bien. En fait, ce n'est pas seulement un NSTableView, mais un NSView qui contient plusieurs objets: boutons, labels + cette vue Table. Quand j'utilise ce NSView dans une fenêtre, je veux juste dire à son TableView: "Hé, cette fois, je veux que tu te comportes comme un outlineView". Est-ce que ça fait du sens? – Joshua