我如何使用多态来允许方法接受多个类,但使用IBOutlets?

我有一个接受UIView对象的特定方法,我想将对象传递给它,它可以是两个类之一。 所以说它接受代表动物的UIView ,我希望能够传递DogViewCatView或其他动物类型。

在该方法中,我想设置所有动物都有的nameLabel视图。 如何设置它以便我能够做到这一点?

我的第一反应是有一个超类(如AnimalView ),它上面有nameLabel变量,然后为每个新动物子类化它。 但是,如果我想将nameLabel作为sockets,它似乎不可设置,因为我无法在每个子类中使用变量将视图连接到IB中。

然后我尝试了一个Protocol ,但这不是多态的,我无法通过通用超类访问nameLabel属性,是吗? 与Objective-C不同,我不能要求UIView ,然后它会允许我要求它。

我该怎么做? 我只是希望能够传递不同类型的对象并使其与Interface Builder兼容。 我是否应该以完全不同的方式接近它?

如果故事板中的不同viewControlelrs通过故事板中的Subclasses (从SuperClass派生)名称viewControlelrs ,则可以使用故事板中的viewControllerslabelsockets连接到不同的viewControllers

1)只需定义

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

SuperClass SubClass2派生的故事板中的SubClass2 SuperClass view controller2 SuperClass来自SuperClass故事板中的另一个view controller2

2)然后转到Assistant Editor并打开SuperClass一侧和另一view controller1并将SuperClasssockets连接到viewBoard中的view controller1 label 。从SuperClass labelview controller1 storyBoard 在此处输入图像描述

3)现在再次打开SuperClass一侧和另一view controller2并将SuperClass出口连接到storyBoard中的view controller2 label 。从SuperClass labelview controller2 storyBoard

如果单击SuperClasssockets,则会看到两个连接到不同viewControllers的标签

superclass AnimalView声明IBOutlet 。 然后在Interface Builder中,一旦您在Identity检查器中将自定义UIView's类设置为DogView ,请转到Connections Inspector,您的nameLabel将在那里。

 @interface Parent : UIView @property (nonatomic,weak) IBOutlet UILabel *nameLabel; @end @interface Child : Parent @end 

在此处输入图像描述