如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT

Posted

技术标签:

【中文标题】如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT【英文标题】:How to add a custom uiview to a view controller programmatically SWIFT 【发布时间】:2015-07-20 00:00:01 【问题描述】:

我正在尝试以编程方式将自定义视图添加到我的视图控制器。我使用了这段 sn-p 代码,但没有成功地出现在我的主视图控制器前面。

 var DynamicView = CustomFilter()
    DynamicView.setTranslatesAutoresizingMaskIntoConstraints(false)



    self.view.addSubview(DynamicView)

自定义过滤器类:

import UIKit

自定义过滤器类:

UIView 
@IBOutlet weak var party: UIButton!
@IBOutlet weak var outdoors: UIButton!
@IBOutlet weak var sports: UIButton!
@IBOutlet weak var diner: UIButton!
@IBOutlet weak var music: UIButton!
@IBOutlet weak var gaming: UIButton!

自定义过滤器连接到 xib 文件。

Xib 文件:

自定义视图是否有可能不合适?我不确定我做错了什么。

【问题讨论】:

如果你想从 xib 加载视图...你必须从 xib 加载它... @nhgrif 我想在我的视图控制器上加载一个 xib。我不确定我该怎么做。抱歉,我的问题有点不清楚。 【参考方案1】:

为了使用我们在 xib 中设计的视图,我们大多从 xib 加载。

if 
    let bundle = NSBundle(forClass: CustomFilter.self),
    let nib = bundle.loadNibNamed("<#Xib File Name#>", owner: self, options: nil),
    let dynamicView = nib.first as? CustomFilter 

        self.view.addSubview(dynamicView)

另一种方法是编写 CustomFilterinit 以从 xib 本身加载视图。

更清楚地说,您遇到的问题是您的 CustomFilter 的初始化程序都不会关心您创建的 xib 文件,除非您编写它们并告诉他们关心它。您当前的代码返回一个 0x0 视图,可能是白色或清晰的背景。如果您修改当前代码以将CustomFilter 的框架设置为0x0 以外的大小并将背景颜色设置为UIColor.greenColor(),您会清楚地看到它。

另外,您可以使用 Xcode 的可视化调试器来找到它。

【讨论】:

【参考方案2】:

它可能是零高度和零宽度,也可能在屏幕外。

你需要给它高度和宽度约束以及 x 和 y 位置约束。

您可能还应该使用 CustomFilter(frame: someFrameRect),因为我记得 initWithFrame 是 UIView 的指定初始化程序。

顺便说一句,变量名应该以小写字母开头,所以DynamicView应该是dynamicView

【讨论】:

使用零参数初始化器没有任何问题。当您要添加可能会改变框架的自动布局约束时,传递框架矩形没有多大意义...... 我尝试了你的建议。视图仍然没有出现。也许它在我的 viewcontroller 后面,这可能吗? @htjohn 不,这是不可能的。视图控制器根本不是用户界面的一部分。它是view 属性,但是您将视图添加为视图控制器视图的子视图。视图永远不能落后于其父级(或其任何祖级)。

以上是关于如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT的主要内容,如果未能解决你的问题,请参考以下文章

将自定义 UIView 添加到 TableViewCell

以编程方式使用堆栈视图

如何以编程方式将自定义 Java 视图类加载到 RelativeLayout

如何将 UIView 添加到 CALayer

如何以编程方式将 UILabel 和 UiImageView 添加到表视图单元格内的 UIView?

如何以编程方式将 UISegmentedControl 添加到容器视图