UITableViewCell super class 属性 从 UITableView 设置时返回 nil
UITableViewCell super class property returning nil when set from UITableView
我为此浪费了很多时间。当从 tableView 设置 属性 时,UITableViewCell 的 master/super class 的 属性 (isSender
) 总是返回 nil:
这里是主 Cell Class:
class MasterTableViewCell: UITableViewCell {
@IBOutlet weak var userProfileImage:UIImageView!
@IBOutlet weak var postTextLabel:UILabel!
var isSender:Bool!
override func awakeFromNib() {
// code here
}
这是 Cell Subclass:
class VideoPostTableViewCell: MasterTableViewCell {
@IBOutlet weak var playButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
if isSender == true {
print("true")
}
else {
print("false")
}
这是 tableView
方法:
func configureCell(indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
return UITableViewCell()}
let x = post.userID
let y = user?.uid
let isEqual = (x == y)
cell.isSender = isEqual
return cell
isSender
总是returnsnil
注意:直接在VideoPostTableViewCell
中设置isSender
时,也会返回nil
。此外,当我在 let isEqual = (x == y)
处放置一个断点时, isEqual
returns true
最后,VideoPostTableViewCell
和MasterTableViewCell
中的其他属性都使用tableView
中的相同方法正确设置。为了减少代码,我将它们排除在外。
非常感谢任何帮助。谢谢!
在你的 guard 声明中,你应该修正 else 的情况:
guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
fatalError("Misconfigured cell type, VideoPostTableViewCell!")
}
根据 OP 的评论...
if isSender == true
的评估发生在 awakeFromNib()
内部,但发生在 之前 执行cell.isSender = isEqual
.
我为此浪费了很多时间。当从 tableView 设置 属性 时,UITableViewCell 的 master/super class 的 属性 (isSender
) 总是返回 nil:
这里是主 Cell Class:
class MasterTableViewCell: UITableViewCell {
@IBOutlet weak var userProfileImage:UIImageView!
@IBOutlet weak var postTextLabel:UILabel!
var isSender:Bool!
override func awakeFromNib() {
// code here
}
这是 Cell Subclass:
class VideoPostTableViewCell: MasterTableViewCell {
@IBOutlet weak var playButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
if isSender == true {
print("true")
}
else {
print("false")
}
这是 tableView
方法:
func configureCell(indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
return UITableViewCell()}
let x = post.userID
let y = user?.uid
let isEqual = (x == y)
cell.isSender = isEqual
return cell
isSender
总是returnsnil
注意:直接在VideoPostTableViewCell
中设置isSender
时,也会返回nil
。此外,当我在 let isEqual = (x == y)
处放置一个断点时, isEqual
returns true
最后,VideoPostTableViewCell
和MasterTableViewCell
中的其他属性都使用tableView
中的相同方法正确设置。为了减少代码,我将它们排除在外。
非常感谢任何帮助。谢谢!
在你的 guard 声明中,你应该修正 else 的情况:
guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
fatalError("Misconfigured cell type, VideoPostTableViewCell!")
}
根据 OP 的评论...
if isSender == true
的评估发生在 awakeFromNib()
内部,但发生在 之前 执行cell.isSender = isEqual
.