我正在将数据从UIViewController发送到UIView,而我面临的问题是当我设置数据以标记其不显示数据时。在设置数据之前,我先打印数据并进行打印。
class SearchDetailsView: UIView {
@IBOutlet var contentView: UIView!
@IBOutlet var hiraganaLbl: UILabel!
var nameNew = String()
required init(name: String){
super.init(frame: CGRect.zero)
self.nameNew = name
self.commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
Bundle.main.loadNibNamed("SearchDetailsView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(self.contentView)
print("name is \(self.nameNew)")
self.hiraganaLbl.text = self.nameNew
}
}
打印功能正在打印我从UIViewController传递但未设置为标签的数据。
答案 0 :(得分:0)
由于您将xib
用于SearchDetailsView
,因此无需使用init
来获取SearchDetailsView
的新实例。
只需使用class
方法loadNib(with:)
来获取新的SearchDetailsView
实例。
class SearchDetailsView: UIView {
@IBOutlet var hiraganaLbl: UILabel!
var nameNew: String? {
didSet {
self.hiraganaLbl.text = nameNew
}
}
class func loadNib(with name: String?) -> SearchDetailsView? {
if let view = Bundle.main.loadNibNamed("SearchDetailsView", owner: self, options: nil)?.first as? SearchDetailsView {
view.nameNew = name
return view
}
return nil
}
}
在上面的代码中,hiraganaLbl's
的{{1}}中设置了text
didSet
。
在您的nameNew
中,使用
ViewController
的实例
SearchDetailsView
答案 1 :(得分:0)
代替在init
函数(构造函数)中传递它,您可以编写一个新的public方法并调用它以在需要设置文本时将其设置为标签。它应该工作。喜欢
var nameNew: String;
.... other code
public func setTextToLabel(nameNew: String)
{
self.nameNew = nameNew;
self.hiraganaLbl.text = self.nameNew
}
然后在显示此视图的ViewController
中调用此方法。
答案 2 :(得分:0)
我通过在ViewController类中执行以下操作解决了该问题:
vector
并通过以下方式设置要标记的文本:
@IBOutlet var searchDetailView: SearchDetailsView!
,并删除了从init()方法发送文本的操作。