如何以编程方式将自定义 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)
另一种方法是编写 CustomFilter
的 init
以从 xib 本身加载视图。
更清楚地说,您遇到的问题是您的 CustomFilter
的初始化程序都不会关心您创建的 xib 文件,除非您编写它们并告诉他们关心它。您当前的代码返回一个 0x0 视图,可能是白色或清晰的背景。如果您修改当前代码以将CustomFilter
的框架设置为0x0 以外的大小并将背景颜色设置为UIColor.greenColor()
,您会清楚地看到它。
另外,您可以使用 Xcode 的可视化调试器来找到它。
【讨论】:
【参考方案2】:它可能是零高度和零宽度,也可能在屏幕外。
你需要给它高度和宽度约束以及 x 和 y 位置约束。
您可能还应该使用 CustomFilter(frame: someFrameRect)
,因为我记得 initWithFrame 是 UIView 的指定初始化程序。
顺便说一句,变量名应该以小写字母开头,所以DynamicView
应该是dynamicView
【讨论】:
使用零参数初始化器没有任何问题。当您要添加可能会改变框架的自动布局约束时,传递框架矩形没有多大意义...... 我尝试了你的建议。视图仍然没有出现。也许它在我的 viewcontroller 后面,这可能吗? @htjohn 不,这是不可能的。视图控制器根本不是用户界面的一部分。它是view
属性,但是您将视图添加为视图控制器视图的子视图。视图永远不能落后于其父级(或其任何祖级)。以上是关于如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将自定义 Java 视图类加载到 RelativeLayout