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

时间:2015-07-20 00:00:02

标签: swift uiview xib subview

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

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



    self.view.addSubview(DynamicView)

CustomFilter类:

import UIKit

class CustomFilter:

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文件:

enter image description here

是否有可能自定义视图无法放置?我不确定我做错了什么。

2 个答案:

答案 0 :(得分:2)

为了使用我们在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的可视化调试器来查找它。

答案 1 :(得分:0)

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

您需要赋予它高度和宽度约束以及x和y位置约束。

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

另外,变量名称应以小写字母开头,因此DynamicView应为dynamicView