如何将值从 XIB 传递到 UIView 初始化程序?
Posted
技术标签:
【中文标题】如何将值从 XIB 传递到 UIView 初始化程序?【英文标题】:How do I pass values into a UIView initializer from a XIB? 【发布时间】:2019-01-31 00:01:31 【问题描述】:我制作了一个带有一些网点的自定义 UIView XIB 文件。我希望能够从我的代码中的其他地方以编程方式加载它。我在 xib 中使用自动布局。我的问题是我需要使用参数值对其进行初始化以满足委托方法。我不确定如何在初始化期间传递参数。我也不太了解整个 init(frame:) vs init(coder:) 以及便利的 init 在这里如何工作。有什么建议吗?
背景:目前整个视图在 Obj-C 中是编程的,我正在用 swift 将它移植到 XIB。
【问题讨论】:
【参考方案1】:有很多不同的方式来处理视图的初始化。您可以创建一个为您完成所有工作的静态函数。这是避免重写 init 方法的一种方法。
class TestView: UIView
var delegate: Any!
static func instantiate(with delegate: Any) -> TestView
let nib = UINib(nibName: "TestView", bundle: nil)
guard let testView = nib.instantiate(withOwner: nil)[0] as? TestView else
fatalError("Attempted to create TestView, failed to find object")
testView.delegate = delegate
return testView
然后您执行以下操作来创建您的视图
let testView = TestView.instantiate(with:mydelegate)
【讨论】:
【参考方案2】:我的解决方案。为我工作!
import Foundation
import UIKit
class NotFoundView: UIView
@IBOutlet var contentView: UIView!
@IBOutlet var lblContentTitle: UILabel!
override init(frame: CGRect)
super.init(frame: frame)
customize()
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
customize()
private func customize()
print("customize")
Bundle.main.loadNibNamed("NotFoundView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
let notFoundView = NotFoundView()
notFoundView.lblContentTitle.text = "Not found. Please try again..."
return notFoundView
【讨论】:
以上是关于如何将值从 XIB 传递到 UIView 初始化程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何将值从 tableview 传递到 collectionview
如何将值从 javascript 函数传递到 django 视图