如何在界面构建器中使用不同的drawRect方法初始化UIView?

时间:2014-05-21 03:34:55

标签: ios uiview interface-builder

假设我使用界面构建器绘制包含xib的{​​{1}}文件。

此视图可以是圆形或多边形,但其中的所有其他内容都是相同的,只是形状不同。我怎么能在一个UIView子类中做到这一点?当我想要一个圆圈时,我可以在显示笔尖时加载一个圆圈,当我想要一个多边形时,我也可以从笔尖加载一个多边形。

现在我正在使用UIView的子类,以便我有一个UIView类和一个Circle类。但是要从nib文件加载其中任何一个,我可能需要创建另一个Polygon文件,让每个文件包含一个xib子类。

- 更新:

例如,我有UIView使用UITableView作为CellViewUITableViewCell是从nib文件初始化的,但也有自定义的类实现。然后在CellView内有一个显示不同形状的CellView,它可以是圆形或多边形。 'ShapeView'也有一个自定义的实现,但我现在没有使用另一个nib文件来创建它。我希望在ShapeView加载时CellView将加载一些传入的参数,以便它显示正确的形状。

1 个答案:

答案 0 :(得分:0)

直截了当的方法是拥有一个具有shape属性的UIView子类。像这样:

typedef enum ShapeType {
    ST_Circle,
    ST_Square,
    ST_Polygon
};

@class ShapeView : UIView {
}

@property ShapeType shape;

@end

-drawRect方法中,只需在绘制前检查shape

或者,您可以拥有一个多边形边数的属性。您可以使用0或1表示圆圈。在-drawRect方法中,根据边数绘制多边形。

如果您希望能够在Interface Builder中设置属性,则可以设置视图标记,并将其转换为-awakeFromNib中的形状类型(或边数)。