初始化后如何访问自定义视图属性

Posted

技术标签:

【中文标题】初始化后如何访问自定义视图属性【英文标题】:How to access custom view properties after initialize 【发布时间】:2015-07-23 10:41:26 【问题描述】:

我的目标是 ios 8+。

我有一个在多个地方使用的表单。所以我决定创建一个自定义视图,在其中定义各种“表单”文本字段。

我已经构建了我的 XIB,并且 UIView 子类包含每个 textField 的出口。

视图由背景图像和带有表单域的滚动条组成。

现在,我的第一个障碍是:我需要在一个可能有也可能没有导航栏的容器中拥有这个自定义视图。这让我创建了一个约束出口,这样我就可以更新它的值来下推滚动视图。这样我就可以将整个图像放在框架中,顶部位于导航栏后面,滚动条位于导航栏下方)。

这是帮助理解问题的手动绘图。

很有可能我在解决这个问题的过程中搞得一团糟。 :)

问题是:

awakeFromNib 运行后,我无法访问约束属性。然后我注意到 TextFields 网点也发生了同样的事情。

那么,当我以编程方式实例化自定义视图的属性时,如何访问它们?

类似:

控制器:

let customView = SignupView(frame: f)
view.addSubview(customView)
customView.pushScrollerDownBy(50.0)

自定义视图:

func pushScrollerDownBy(yOffset: CGFloat) 
    //topScrollerConstraint is the outlet for the textField.
    topScrollerConstraint.constant = yOffset //right now topScrollerConstraint is nil. 

【问题讨论】:

我认为您在将视图连接到视图本身时将 topScrollerConstraint 连接到文件所有者。你能检查一下吗? 谢谢尼克!这就是问题所在。该死!我已将 CustomView.swift 文件连接为视图的类,而不是文件所有者。我猜不会单独抓到那个。 太好了,将其作为答案发布以供将来参考:) 【参考方案1】:

您应该检查您是否已将您的topScrollerConstraint 连接到文件的所有者,因为它不会被实例化,因此会出错。这是最近关于这两者之间区别的SO问题:

What is File’s owner in XIB in this case?

【讨论】:

以上是关于初始化后如何访问自定义视图属性的主要内容,如果未能解决你的问题,请参考以下文章

实现自定义 MVC 基本视图页面

自定义视图在缩放后重绘时如何防止“反弹”效果?

xml android中无法访问自定义视图属性

如何将自定义视图拖动为 Xcode 6 中自定义视图的私有属性

从 ASP.net Core 2 中的视图访问自定义 ApplicationUser 属性

如何使用属性单元测试自定义视图