Come utilizzerei il polimorfismo per consentire a un metodo di accettare più classi, ma con IBOutlets?
Domanda
Ho un metodo specifico che accetta a UIView
object e voglio passargli oggetti che possono appartenere a una delle due classi.Quindi diciamo che accetta a UIView
che rappresenta un animale, voglio poter passare a DogView
e un CatView
o potenzialmente altre classi di tipo animale.
All'interno di questo metodo voglio impostare il file nameLabel
visione che hanno tutti gli animali.Come posso configurarlo in modo da poterlo fare?
La mia prima reazione è stata quella di avere una super lezione (come AnimalView
) che ha il nameLabel
variabile su di esso, quindi sottoclassarlo per ogni nuovo animale.Tuttavia, se voglio il nameLabel
per essere uno sbocco, non sembra impostabile in quanto non potrei avere la variabile in ogni sottoclasse a cui collegare la vista in IB.
Ho quindi provato a Protocol
, ma non è polimorfico e non sarei in grado di accedere alla proprietà nameLabel tramite una superclasse generica, vero?A differenza di Objective-C non potrei chiedere a UIView <ProtocolName>
e mi permetterebbe quindi di richiederlo.
Come dovrei farlo?Voglio solo essere in grado di passare diversi tipi di oggetti e renderlo compatibile con Interface Builder.Dovrei affrontarlo in modo completamente diverso?
Soluzione
È possibile collegare la presa di label
a diverso viewControllers
con il tuo SuperClass
dallo storyboard se sei diverso viewControlelrs
nello storyboard ripreso da Subclasses
(derivati da SuperClass) nomi nello storyboard.
1)Basta definire
class SuperClass{
@IBOutlet weak var label: UILabel! = nil
}
SubClass1
rappresentante view controller1
nello storyboard derivato da SuperClass
SubClass2
rappresentarne un altro view controller2
nello storyboard derivato da SuperClass
2)Che andare a Assistant Editor
e aperto SuperClass
un lato e l'altro lato view controller1
e collegare la presa da SuperClass
A label
nello storyBoard in view controller1
.Trascina da SuperClass
label
nello storyBoard view controller1
3)Ora apri di nuovo SuperClass
un lato e l'altro lato view controller2
e collegare la presa da SuperClass
A label
nello storyBoard in view controller2
.Trascina da SuperClass
label
nello storyBoard view controller2
Se clicchi su SuperClass
outlet di quanto vedrai due etichette collegate a diversi viewController
Altri suggerimenti
Dichiarare il IBOutlet
in un superclass
, AnimalView
.Poi in Interface Builder, una volta impostato la classe UIView's
personalizzata nell'ispettore di identità per essere DogView
, andare all'ispettore delle connessioni e il nameLabel
sarà lì.
@interface Parent : UIView
@property (nonatomic,weak) IBOutlet UILabel *nameLabel;
@end
@interface Child : Parent
@end
.