【问题标题】:How to add a custom uiview to a view controller programmatically SWIFT如何以编程方式将自定义 uiview 添加到视图控制器 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。我不确定我该怎么做。抱歉,我的问题有点不清楚。

标签: swift uiview xib subview


【解决方案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 属性,但是您将视图添加为视图控制器视图的子视图。视图永远不能落后于其父级(或其任何祖级)。
    猜你喜欢
    • 2020-01-30
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多