我有一个特定的方法,接受一个 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 并连接出口从 SuperClasslabel 在故事板中 view controller1.从...... SuperClass label 进入故事板 view controller1 enter image description here

3)现在再次打开 SuperClass 一侧和另一侧 view controller2 并连接出口从 SuperClasslabel 在故事板中 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

enter image description here

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top