¿Cómo usaría el polimorfismo para permitir que un método acepte múltiples clases, pero con IBOutlets?

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

  •  02-01-2020
  •  | 
  •  

Pregunta

Tengo un método específico que acepta un UIView objeto, y quiero pasarle objetos que puedan ser de una de dos clases.Entonces digamos que acepta un UIView que representa un animal, quiero poder pasar un DogView y un CatView u otras clases de tipos de animales potencialmente.

Dentro de ese método quiero configurar el nameLabel vista, que todos los animales tienen.¿Cómo lo configuro para poder hacer esto?

Mi primera reacción fue tener una superclase (como AnimalView) que tiene la nameLabel variable en él y luego subclasificarla para cada nuevo animal.Sin embargo, si quiero el nameLabel Para ser una salida, no parece configurable ya que no podría tener la variable en cada subclase para conectar la vista en IB.

Luego probé un Protocol, pero eso no es polimórfico y no podría acceder a la propiedad nameLabel a través de una superclase genérica, ¿verdad?A diferencia de Objective-C, no podría pedir un UIView <ProtocolName> y luego me permitiría pedirlo.

¿Cómo debería hacer esto?Sólo quiero poder pasar diferentes tipos de objetos y que sea compatible con Interface Builder.¿Debería abordarlo de manera completamente diferente?

¿Fue útil?

Solución

Puede conectar la salida de label a diferentes viewControllers con tu SuperClass del guión gráfico si eres diferente viewControlelrs en el guión gráfico repetido por Subclasses(derivados de SuperClass) nombres en el guión gráfico.

1)Solo define

 class SuperClass{
     @IBOutlet weak var label: UILabel! = nil

 }

SubClass1 representar view controller1 en el guión gráfico derivado de SuperClass SubClass2 representar a otro view controller2 en el guión gráfico derivado de SuperClass

2) Luego ir a Assistant Editor y abierto SuperClass un lado y otro lado view controller1 y conecte la salida de SuperClass a label en el tablero gráfico en view controller1.Arrastrar desde SuperClass label al storyboard en view controller1 enter image description here

3)Ahora nuevamente abierto SuperClass un lado y otro lado view controller2 y conecte la salida de SuperClass a label en el tablero gráfico en view controller2.Arrastrar desde SuperClass label al storyboard en view controller2

Si haces clic en SuperClass outlet, verá dos etiquetas conectadas a diferentes viewControllers

Otros consejos

Declarar el IBOutlet en un superclass, AnimalView.Luego, en Interface Builder, una vez que haya configurado la configuración personalizada UIView's clase en el inspector de identidad para ser DogView, ve al Inspector de Conexiones y a tu nameLabel estaré ahí.

@interface Parent : UIView

@property (nonatomic,weak) IBOutlet UILabel *nameLabel;

@end

@interface Child : Parent

@end

enter image description here

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top