Come utilizzerei il polimorfismo per consentire a un metodo di accettare più classi, ma con IBOutlets?

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

  •  02-01-2020
  •  | 
  •  

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?

È stato utile?

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

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
.

Inserire l'immagine Descrizione qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top