Wie würde ich Polymorphismus verwenden, damit eine Methode mehrere Klassen akzeptieren kann, aber mit IBOutlets?
Frage
Ich habe eine spezielle Methode, die a akzeptiert UIView
objekt, und ich möchte Objekte an es übergeben, die einer von zwei Klassen angehören können.Sagen Sie also, es akzeptiert a UIView
das stellt ein Tier dar, ich möchte in der Lage sein, eine zu passieren DogView
und ein CatView
oder andere Tierartklassen möglicherweise.
Innerhalb dieser Methode möchte ich die einstellen nameLabel
aussicht, die alle Tiere haben.Wie richte ich es ein, damit ich das tun kann?
Meine erste Reaktion war, eine Superklasse zu haben (wie zum Beispiel AnimalView
) das hat die nameLabel
variable darauf und unterklassifiziere es dann für jedes neue Tier.Wenn ich jedoch das will nameLabel
um eine Steckdose zu sein, scheint es nicht einstellbar zu sein, da ich nicht in jeder Unterklasse die Variable haben könnte, um die Ansicht in IB zu verkabeln.
Ich habe dann versucht, ein Protocol
, aber das ist nicht polymorph und ich könnte nicht über eine generische Oberklasse auf die nameLabel Eigenschaft zugreifen, oder?Im Gegensatz zu Objective-C konnte ich nicht nach einem fragen UIView <ProtocolName>
und es würde mir dann erlauben, danach zu fragen.
Wie soll ich das machen?Ich möchte nur in der Lage sein, verschiedene Arten von Objekten zu übergeben und sie mit dem Interface Builder kompatibel zu machen.Sollte ich es ganz anders angehen?
Lösung
Sie können die Steckdose von anschließen label
zu verschiedenen viewControllers
mit Ihrem SuperClass
aus dem Storyboard wenn Ihr anders viewControlelrs
im Storyboard-Repertoire von Subclasses
(abgeleitet von Oberklassen-) Namen im Storyboard.
1) Einfach definieren
class SuperClass{
@IBOutlet weak var label: UILabel! = nil
}
SubClass1
represent view controller1
im Storyboard abgeleitet von SuperClass
SubClass2
represent ein anderes view controller2
im Storyboard abgeleitet von SuperClass
2) Dann gehe zu Assistant Editor
und öffnen SuperClass
eine Seite und andere Seite view controller1
und Steckdose anschließen von SuperClass
zu label
im storyBoard in view controller1
.Ziehen von SuperClass
label
zum storyBoard in view controller1
3) Jetzt wieder offen SuperClass
eine Seite und andere Seite view controller2
und Steckdose anschließen von SuperClass
zu label
im storyBoard in view controller2
.Ziehen von SuperClass
label
zum storyBoard in view controller2
Wenn Sie auf klicken SuperClass
ausgang Dann sehen Sie zwei Beschriftungen, die mit verschiedenen ViewControllern verbunden sind
Andere Tipps
Deklarieren Sie die IBOutlet
in einem superclass
, AnimalView
.Dann im Interface Builder, sobald Sie die benutzerdefinierte festgelegt haben UIView's
klasse im Identitätsinspektor zu sein DogView
, gehen Sie zum Verbindungsinspektor und Ihrem nameLabel
wird da sein.
@interface Parent : UIView
@property (nonatomic,weak) IBOutlet UILabel *nameLabel;
@end
@interface Child : Parent
@end