SWIFT: UITableViewCell 在 UITableView 中设置其属性之前被初始化
SWIFT: UITableViewCell is initialised before its properties are set in UITableView
我有这个UITableViewCell
:
class TableViewCell3: UITableViewCell {
var sectionLabel: String?
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setupLabel()
}
func setupLabel() {
let myTextField: UITextField = UITextField(frame: CGRect(x: 0, y: 0, width: 300.00, height: 30.00));
// App crashes here because sectionLabel is nil
myTextField.text = sectionLabel!
self.contentView.addSubview(myTextField)
}
}
如您所见,我试图在每个 UITableViewCell
中显示一个 UITextField
。
我要显示的 属性 sectionLabel
设置在 UITableView
:
中
extension MoviesViewController5: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell =
tableView.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath) as? sectionTableCell2
else {
fatalError("Unable to create explore table view cell")}
cell.sectionLabel = sectionsLabels![indexPath.row]
return cell
}
}
问题是 UITableViewCell
在 sectionLabel
属性 设置之前初始化。
所以当我尝试显示它时:
myTextField.text = sectionLabel!
应用程序崩溃,因为它是 nil
。
是的,我知道我应该添加 nil
检查,但这不是重点。
POINT 是如何显示 UItextField
AFTER sectionLabel
属性 设置的。
最好在初始化程序中设置 UITextfield
并在更新 sectionLabel
时设置其文本。
class TableViewCell3: UITableViewCell {
private var myTextField: UITextField?
var sectionLabel: String? {
didSet {
self.myTextField?.text = self.sectionLabel
}
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setupLabel()
}
func setupLabel() {
myTextField = UITextField(frame: CGRect(x: 0, y: 0, width: 300.00, height: 30.00));
self.contentView.addSubview(myTextField!)
}
}
我有这个UITableViewCell
:
class TableViewCell3: UITableViewCell {
var sectionLabel: String?
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setupLabel()
}
func setupLabel() {
let myTextField: UITextField = UITextField(frame: CGRect(x: 0, y: 0, width: 300.00, height: 30.00));
// App crashes here because sectionLabel is nil
myTextField.text = sectionLabel!
self.contentView.addSubview(myTextField)
}
}
如您所见,我试图在每个 UITableViewCell
中显示一个 UITextField
。
我要显示的 属性 sectionLabel
设置在 UITableView
:
extension MoviesViewController5: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell =
tableView.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath) as? sectionTableCell2
else {
fatalError("Unable to create explore table view cell")}
cell.sectionLabel = sectionsLabels![indexPath.row]
return cell
}
}
问题是 UITableViewCell
在 sectionLabel
属性 设置之前初始化。
所以当我尝试显示它时:
myTextField.text = sectionLabel!
应用程序崩溃,因为它是 nil
。
是的,我知道我应该添加 nil
检查,但这不是重点。
POINT 是如何显示 UItextField
AFTER sectionLabel
属性 设置的。
最好在初始化程序中设置 UITextfield
并在更新 sectionLabel
时设置其文本。
class TableViewCell3: UITableViewCell {
private var myTextField: UITextField?
var sectionLabel: String? {
didSet {
self.myTextField?.text = self.sectionLabel
}
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setupLabel()
}
func setupLabel() {
myTextField = UITextField(frame: CGRect(x: 0, y: 0, width: 300.00, height: 30.00));
self.contentView.addSubview(myTextField!)
}
}