如何更改同一视图中显示的图表?
我在视图控制器中有一个视图。 这个视图里面有另一个视图,我已经为其分配了一个自定义类(子类UIView)。 此自定义类具有在此视图中绘制交互式图表的代码。 交互式代码由主视图中的滑块操作。 我在界面构建器中拥有所有这些。
如果我想在此视图中绘制完全不同的图表怎么办? 我希望能够使用一组不同的绘图代码为此视图分配一个新类?但是如何?
答案 0 :(得分:0)
有很多方法可以做到这一点,但changing the class at runtime是not advisable
以下是一些建议:
1 /将customView1替换为与第一个视图位于同一位置的正确类型的其他视图实例...
self.customView2 = [[CustomView2 alloc] initWithFrame:self.customView1.frame];
[self.view addSubView:self.customView2];
[self.customView1 removeFromSuperView];
此示例为每个交换的子视图使用不同的属性,但您可以使用单个属性来引用当前子视图 - 这可以帮助链接滑块以对图表做正确的操作。如果你正在做很多事情,你需要考虑内存问题 - 当customView1消失时,你会重复使用吗?你可以把它留在(强)属性(更快,需要更多内存),或每次创建一个新的(更慢,需要更少的内存)。
2 /如果要在它们之间切换,可以将它们放在Interface Builder中,并在视图层次结构(hidden
数组)中切换它们的self.view.subviews
属性或它们的顺序。节省必须不断重建视图。
3(更好......)/保留UIView的单个子类并使用属性来影响绘制的图...
//CustomView.h
@property (nonatomic,assign) BOOL drawDiagram1;
@property (nonatomic, assign) BOOL drawDiagram2;
//CustomView.m
- (void)drawRect {
if (drawDiagram1) [self drawDiagram1];
if (drawDiagram2) [self drawDiagram2];
}
- (void) drawDiagram1 {
//drawDiagram1 code here
}
- (void) drawDiagram2 {
//drawDiagram2 code here
}