我为此花了很多时间。当从tableView设置属性时,UITableViewCell的主类/超级类的属性(isSender
总是返回nil:
这是主单元格类:
class MasterTableViewCell: UITableViewCell {
@IBOutlet weak var userProfileImage:UIImageView!
@IBOutlet weak var postTextLabel:UILabel!
var isSender:Bool!
override func awakeFromNib() {
// code here
}
这是单元格子类:
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
始终返回nil
值得注意的是:直接在nil
中设置isSender
时也会返回VideoPostTableViewCell
。另外,当我在let isEqual = (x == y)
处设置一个断点时,isEqual
返回true
最后,VideoPostTableViewCell
和MasterTableViewCell
中还有其他属性,它们都在tableView
中用相同的方法正确设置。我将它们排除在外以减少代码。
任何帮助,我们将不胜感激。谢谢!
答案 0 :(得分:2)
根据OP的评论...
对if isSender == true
的评估是在awakeFromNib()
内部进行的,但这是在 执行cell.isSender = isEqual
之前发生的。 / p>
答案 1 :(得分:0)
在您的监护人声明中,您应解决其他情况:
guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
fatalError("Misconfigured cell type, VideoPostTableViewCell!")
}