我将如何使用多态性来允许一个方法接受多个类,但使用Iboutlet?
题
我有一个特定的方法,接受一个 UIView
对象,并且我想将可以是两个类之一的对象传递给它。所以说它接受一个 UIView
这代表一种动物,我希望能够通过一个 DogView
和一个 CatView
或其它动物类型的类潜在地。
在该方法中,我想设置 nameLabel
观,其中所有的动物都有。我如何设置它,以便我能够做到这一点?
我的第一反应是有一个超级类(如 AnimalView
)有 nameLabel
上的变量,然后为每个新动物子类化。但是,如果我想要 nameLabel
作为一个出口,它似乎不可设置,因为我无法在每个子类中使用变量将视图连接到IB中。
然后我尝试了一个 Protocol
, ,但这不是多态的,我无法通过泛型超类访问nameLabel属性,对吗?不像Objective-C,我不能要求一个 UIView <ProtocolName>
然后它会允许我要求它。
我该怎么做?我只是希望能够传递不同类型的对象,并使其与Interface Builder兼容。我应该完全不同地对待它吗?
解决方案
你可以连接 label
到不同的 viewControllers
与您的 SuperClass
从故事板 如果你的不同 viewControlelrs
在故事板上, Subclasses
(从超类派生)storyboard中的名称。
1)只需定义
class SuperClass{
@IBOutlet weak var label: UILabel! = nil
}
SubClass1
重新登记 view controller1
在storyboard派生自 SuperClass
SubClass2
重新分配另一个 view controller2
在storyboard派生自 SuperClass
2)比去 Assistant Editor
并打开 SuperClass
一侧和另一侧 view controller1
并连接出口从 SuperClass
到 label
在故事板中 view controller1
.从...... SuperClass
label
进入故事板 view controller1
3)现在再次打开 SuperClass
一侧和另一侧 view controller2
并连接出口从 SuperClass
到 label
在故事板中 view controller2
.从...... SuperClass
label
进入故事板 view controller2
如果你点击 SuperClass
你会看到两个标签连接到不同的viewcontroller
其他提示
申报 IBOutlet
在一个 superclass
, AnimalView
.然后在Interface Builder中,一旦您设置了自定义 UIView's
身份检查器中的类 DogView
, ,去连接检查员和你的 nameLabel
会在那里。
@interface Parent : UIView
@property (nonatomic,weak) IBOutlet UILabel *nameLabel;
@end
@interface Child : Parent
@end