ios loadNibNamed为超类

时间:2014-04-16 15:19:50

标签: ios inheritance xib nib superclass

我有一个带有CustomClass =" BaseClass"的view.xib文件。 (我在XCode编辑器上配置它),所以我可以这样做:

BaseClass *mBassClass= [[[NSBundle mainBundle] loadNibNamed:@"view" owner:self options:nil] objectAtIndex:0];

但我想知道如何做到这一点:

我会从BaseClass获得一个子类。例如,ChildClass从BaseClass扩展,并从Nib加载视图,但使用ChildClass

ChildClass *aChild = [[[NSBundle mainBundle] loadNibNamed:@"view" owner:self options:nil] objectAtIndex:0];

ChildClass2 *anotherView = [[[NSBundle mainBundle] loadNibNamed:@"view" owner:self options:nil] objectAtIndex:0];

所以,我希望BaseClass包含一些具有特定功能的子类,但所有这些视图都具有相同的Nib文件

我的情况中,我正在开发以下观点:

(1)一个nib文件,它有一些来自控件的uibutton和一个包含Core Plot Graph的UIView

(2)一个名为GraphView的BaseClass,它与nib文件匹配,并且它与uibuttons一起运行。

(3)有些子类,每个子类在UIView上绘制不同的图形/图形,但继承了uibutton控件的功能。

有什么建议吗?感谢

1 个答案:

答案 0 :(得分:2)

创建您的XIB作为图表的容器。它包含所有常见的视图和功能,但不包含特定于图表的内容。

现在,当您加载NIB时,您将始终获得BaseClass个实例。实际上,您必须始终获得BaseClass - 您无法更改从NIB中取消归档的类。

您的图表视图不应该是BaseClass的子类。然后应该实例化适合当前情况的图表视图类,并将其添加为容器视图的子视图,该视图由BaseClass(容器)实例拥有。

如果图表视图需要更改公共按钮状态,那么当您将其添加为子视图时,应该为图表视图提供对BaseClass实例的引用。