我如何使用多态来允许方法接受多个类,但使用IBOutlets?
我有一个接受UIView
对象的特定方法,我想将对象传递给它,它可以是两个类之一。 所以说它接受代表动物的UIView
,我希望能够传递DogView
和CatView
或其他动物类型。
在该方法中,我想设置所有动物都有的nameLabel
视图。 如何设置它以便我能够做到这一点?
我的第一反应是有一个超类(如AnimalView
),它上面有nameLabel
变量,然后为每个新动物子类化它。 但是,如果我想将nameLabel
作为sockets,它似乎不可设置,因为我无法在每个子类中使用变量将视图连接到IB中。
然后我尝试了一个Protocol
,但这不是多态的,我无法通过通用超类访问nameLabel属性,是吗? 与Objective-C不同,我不能要求UIView
,然后它会允许我要求它。
我该怎么做? 我只是希望能够传递不同类型的对象并使其与Interface Builder兼容。 我是否应该以完全不同的方式接近它?
如果故事板中的不同viewControlelrs
通过故事板中的Subclasses
(从SuperClass派生)名称viewControlelrs
,则可以使用故事板中的viewControllers
将label
sockets连接到不同的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
并将SuperClass
sockets连接到viewBoard中的view controller1
label
。从SuperClass
label
到view controller1
storyBoard
3)现在再次打开SuperClass
一侧和另一view controller2
并将SuperClass
出口连接到storyBoard中的view controller2
label
。从SuperClass
label
到view controller2
storyBoard
如果单击SuperClass
sockets,则会看到两个连接到不同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