Wie würde ich Polymorphismus verwenden, damit eine Methode mehrere Klassen akzeptieren kann, aber mit IBOutlets?

StackOverflow https://stackoverflow.com//questions/25089654

  •  02-01-2020
  •  | 
  •  

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?

War es hilfreich?

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 enter image description here

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

enter image description here

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top