以编程方式重新初始化UIView导致它不更新

时间:2014-06-04 19:37:36

标签: ios objective-c uiview interface-builder

我有一个UIViewController,它有一个小的可滚动窗口,我在其中放置一个名为" TreeView"的自定义UIView。 TreeView是空白的,但具有特定树的子类。在我的代码中,在viewDidLoad中,我正在执行以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    CGRect treeFrame = self.treeView.frame;
    NSLog(@"passing tree frame of origin %f %f, size: %f, %f", treeFrame.origin.x, treeFrame.origin.y, treeFrame.size.height, treeFrame.size.width);
    self.treeView = [[GelbMotiveView alloc] initWithFrame:treeFrame];
}

然后,在我的测试孩子中,我加载它的.xib文件(成功)并看到UIViews和子视图被添加到孩子。但是,即使我调用setNeedsDisplay,也不会呈现这些视图。相反,原始的TreeView被渲染(我给它一个红色背景,所以我肯定知道)。我可以在测试子类中的drawRect中设置一个断点,它从未被调用过。

我做错了什么?

我只是在做一些完全奇怪的事情吗? UIView的子类是否应该有自己的子类?有没有更好的方法以编程方式交换UIViewController屏幕的一小部分?我的目的是让TreeView的孩子们渲染树/图并使其变得难以处理(节点的按钮等)。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为treeViewIBOutlet并从笔尖加载?

如果是这种情况,那么您所犯的错误就是使用initWithFrame:重新初始化该指针,这会消除您对原始视图的引用,并创建一个不会连接到任何内容的新引用。您可以更改框架并更改其中的属性,但您不应该再次初始化它。