gpt4 book ai didi

ios - 以编程方式将自定义 View 添加到另一个 View

转载 作者:搜寻专家 更新时间:2023-11-01 06:34:37 24 4
gpt4 key购买 nike

我使用 .xib 文件为布局创建了一个自定义 View 。我想以编程方式创建此 View 并将其作为 subview 添加到不同的 View 。

subview 类:

class Subview: UIView {

@IBOutlet var view: UIView!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var textLabel: UILabel!

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

Bundle.main.loadNibNamed("Subview", owner: self, options: nil)
self.addSubview(view)
view.frame = self.bounds
}
}

我不确定该怎么做,目前唯一的构造函数需要一个我没有的 NSCoder 实例。

我试着给它一个额外的初始化程序:

init(title: String, text: String) {
titleLabel.text = title
textLabel.text = text
super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
}

然后调用它:

let v = Subview(title: dataSource[i].whatever, text: dataSource[i].bla)

但是在尝试打开标 checkout 口时失败了,这是有道理的,因为 .xib 尚未初始化。

我已经尝试过使用 tableview 和自定义单元格而不是以编程方式为页面构建 UI,它实际上不起作用,因为这是一个详细信息页面,我只有一个对象作为我的数据源而不是rowForIndexPath TableView 委托(delegate)期望的数组。我知道我可以编写一些映射器方法将对象转换为它的属性数组,但我宁愿尽可能避免这种情况。

谢谢。

最佳答案

1) 转到 Subview.xib 并确保文件所有者留空。

enter image description here

另外,确保您的 View 类被选为 Subview

enter image description here

2) 去掉初始化器,所以:

class Subview: UIView {

@IBOutlet var view: UIView!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var textLabel: UILabel!

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

Bundle.main.loadNibNamed("Subview", owner: self, options: nil)
self.addSubview(view)
view.frame = self.bounds
}
}

应该是:

class Subview: UIView {

@IBOutlet var view: UIView!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var textLabel: UILabel!
}

3) 以这种方式初始化您的 View :

let view = UINib(nibName: "Subview", bundle: nil).instantiate(withOwner: nil, options: nil).first as! Subview

您也可以查看这些。

http://supereasyapps.com/blog/2014/12/15/create-an-ibdesignable-uiview-subclass-with-code-from-an-xib-file-in-xcode-6

How to initialise a UIView Class with a xib file in Swift, iOS

祝你好运!

关于ios - 以编程方式将自定义 View 添加到另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42906159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com