Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以编程方式重新初始化UIView会导致它不更新_Ios_Objective C_Uiview_Interface Builder - Fatal编程技术网

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

Ios 以编程方式重新初始化UIView会导致它不更新,ios,objective-c,uiview,interface-builder,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 treeFram

我有一个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文件(成功),并看到UIView和子视图被添加到子级。但是,即使我调用setNeedsDisplay,这些视图也不会被渲染。相反,原始的TreeView被渲染(我给了它一个红色背景,这样我就可以确定了)。我可以在测试子类的drawRect中放置一个断点,但它从未被调用

我做错了什么


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

我认为
treeView
是一个
IBOutlet
并从nib加载

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