【问题标题】:Programmatically reinitializing a UIView causes it to not update以编程方式重新初始化 UIView 会导致它不更新
【发布时间】:2014-06-05 04:12:52
【问题描述】:

我有一个 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 的子级渲染树/图形并使其变得难以处理(节点的按钮等)。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: ios objective-c uiview interface-builder


    【解决方案1】:

    我认为treeViewIBOutlet 并且是从笔尖加载的?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多